版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构上机实验
课后练习报告
姓名:冯天明
学号:
班级:通信141
2015年9月28日星期一
实验三:
编写一个程序,实现双链表的各种基本运算,并在此基础上设计一个主程序完成
以下功能。
1.初始化双链表L
2.依次采用尾插法或者头插法插入元素a,b,c,d,e
3.输出双链表L
4.输出双链表的长度
5.判断双链表是否为空
6.输出双链表的第四个元素
7.输出元素a的位置
8.在第三个元素位置插入元素f
9输出双链表L
10.删除双链表L的第四个元素
11.输出双链表L
12.释放双链表
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#defineOK0
#defineERROR-2
#defineOVERFLOW-1
typedefcharElemType;
typedefstructDuLNode//定义双向链表
(
ElemTypedata;
DuLNode*prior;
DuLNode*next;
}DuLNode,*DuLinkList;
voidInitDuLinkList(DuLinkListh)〃创建一个空表
h=newDuLNode;//(DuLinkList)malloc(sizeof(DuLNode));
h->next=h->prior;
voidCreateDuLinkList(DuLinkListh,intn)〃初始化链表
DuLNode*p,*q;
InitDuLinkList(h);
q=h;
printf("输入%个元素:\n",n);
fbr(inti=0;i<n;i++)
{
p=(DuLinkList)malloc(sizeof(DuLNode));
scanf("%c",&p->data);
fflush(stdin);
q->next=p;
p->prior=q;
q=p;
}
q->next=NULL;
)
intDestroyList(DuLinkListL)〃销毁链表
(
DuLNode*p=L;
while(L->next)//直到达最后一个节点
(
p=L->next;
L->next=p->next;
free(p);
)
L->prior=NULL;
returnOK;
)
intListEmpty(DuLinkListL)
(
return(L->next==NULL&&L->prior==NULL);
)
DuLNode*GetElem(DuLinkListh,inti)//获取对应节点的元素
(
DuLNode*p;
p=h->next;
intj=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if。==i)
returnp;
else
returnNULL;
)
intDuLinkListInser(DuLinkListh,inti,ElemTypee)
{
DuLNode*p,*s;
p=GetElem(h,i-l);
if(!p)returnERROR;
s=(DuLinkList)malloc(sizeof(DuLNode));
s->data=e;
if(p->next)〃如果插入的不是尾节点
(
p->next->prior=s;
s->next=p->next;
s->prior=p;
p->next=s;
else〃插入的是尾节点
{
s->next=p->next;
p->next=s;
s->prior=p;
returnOK;
)
intDeleListElem(DuLinkListL,inti)
(
DuLNode*p,*q;
p=GetElem(L,i-l);
if(!p)returnERROR;〃删除的元素不存在
if(p->next)〃如果删除的不是最后一个节点
(
q=p->next;
q->next->prior=p;
p->next=q->next;
}
else
(
q=p->next;
p->next=NULL;
}
free(q);
returnOK;
)
intLocateElem(DuLinkListL,ElemTypee)
(
intloca=0;
DuLNode*p;
p=L->next;
if(P)
(
while(p!=L)
{
++loca;
if(p&&p->data==e)〃元素匹配,返回节点
returnloca;
if(!p)
returnERROR;
p=p->next;
)
)
returnERROR;
)
intListLength(DuLinkListL)
(
DuLNode*p=L;
inti=0;
while(p->next)//遍历链表,记录节点数
(
p=p->next;
++i;
}
returni;
)
voidDisplayList(DuLinkListL)
(
DuLNode*p;
p=L->next;
if(ListEmpty(L))
(
printf("链表为空!\n");
return;
)
printf("链表的内容为:");
while(p)〃遍历链表,输出节点data
(
printf("%4c",p->data);
p=p->next;
}
printf("\n");
intmain()
DuLNodeL,*temp;
intloca;
CreateDuLinkList(&L,5);〃初始化链表
DisplayList(&L);〃输出链表
if(ListEmpty(&L))
{
printf("链表为空!\n");
)
else
(
printf("链表不为空!\n");
}
temp=GetElem(&L,4);〃获取第四个位置的元素
printf("链表第四个元素是:%c\n",temp->data);
loca=LocateElem(&L,'a');
printf("元素a在链表的第%d个位置\n",loca);〃寻找a元素在链
表的某个节点
printf("在第三个位置插入元素f:");
DuLinkListInser(&L,3,'f);〃插入元素f在第三个位置
DisplayList(&L);
DeleListElem(&L,4);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 开题报告:学生综合素质评价的理论建构与“落地”路径研究
- 开题报告:新时代我国家庭教育评价指标体系构建研究
- 2024年工程分包方现场作业管理协议版B版
- 2024年度传单发行社交媒体推广合同2篇
- 《质谱法蒋》课件
- 2024年商务促成合作合同范本版B版
- 二零二四年度供应合同的供应物品与供应期限3篇
- 教学计划范文检查记录
- 2024多用途建筑外围结构围墙门楼施工协议
- 《电工电子实践基础》课件第4章
- 万科工序检查一览表建设监理工程管理检查表
- 项目管理人员安全生产责任制确认书
- 路基排水沟边沟水力计算书
- 勘察项目服务计划方案
- 分式混合运算专项练习158题(有答案)26页
- 膝痹病(膝关节骨性关节炎)中医临床路径
- 电力电子技术课程设计
- 匹克球技术水平分级指南
- 山东工艺美术学院硕士研究生开题报告记录表
- E型卡簧选择标准
- 基本开穴方法
评论
0/150
提交评论