链表的基本操作-数据结构实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大学数据结构实验报告
课程名称数据结构实验第(四)次实验实验名称链表的基本操作
学生姓名于歌专业班级学号
实验成绩指导老师(签名)日期2018年10月01日
一、实验目的
1. 学会定义单链表的结点类型,实现对单链表的一些基本操作和具体
的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。
2. 掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。
二、实验要求
1.预习C语言中结构体的定义与基本操作方法。
2.对单链表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容:
1.编写程序完成单链表的下列基本操作:
(1)初始化单链表La
(2)在La中插入一个新结点
(3)删除La中的某一个结点
(4)在La中查找某结点并返回其位置
(5)打印输出La中的结点元素值
(6)清空链表
(7)销毁链表
2 .构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、
Lb合并成一个有序单链表Lc。
四、思考与提高:
1.如果上面实验内容2中合并的表内不允许有重复的数据该如何操作?
2.如何将一个带头结点的单链表La分解成两个同样结构的单链表Lb,Lc,使得Lb中只含La表中奇数结点,Lc中含有La表的偶数结点?五、实验设计
1.编写程序完成单链表的下列基本操作:
(1)初始化单链表La
LinkList InitList()
{
int i,value,n;
LinkList H=(LinkList)malloc(sizeof(LNode));
LinkList P=H;
P->next=NULL;
do{
printf("请输入链表的长度:");
scanf("%d",&n);
if(n<=0)
printf("输入有误请重新输入!\n");
}while(n<=0);
printf("请输入各个元素:\n");
for(i=0; i { scanf("%d",&value); LinkList NEW = (LinkList)malloc(sizeof(LNode)); NEW->data=value; P->next=NEW; NEW->next=NULL; P=NEW; } printf("链表建立成功!\n"); return H->next; } (2)在La中插入一个新结点 LinkList InsertList(LinkList L,int i,ElemType value) { LinkList h,q,t=NewLNode(t,value); int x=0; h=q=L; if(i==1) t->next=h, h=t; else { while(x++ q=q->next; t->next=q->next; q->next=t; } printf("插入成功!\n"); return h; } (3)删除La中的某一个结点 LinkList DeleteList(LinkList L,int i) { LinkList h,q,de; int x=0; h=q=L; int t; if(i==1) h=h->next; else { while(x++ q=q->next; de=q->next; if(de->next==NULL) q->next=NULL; else q->next=de->next; } printf("删除成功!\n"); return h; } (4)在La中查找某结点并返回其位置 Status LocateList(LinkList L,ElemType value) { LinkList q=L; int i=0,t; while(q!=NULL) { i++; if(q->data==value) { printf("该结点在链表中的位置为第%d个\n",i); return OK; } q=q->next; } printf("该链表中没有该结点!\n"); return ERROR; } (5)打印输出La中的结点元素值 Status Print(LinkList L) { LinkList q=L; printf("该链表的每个元素为:\n"); while(q!=NULL) { printf("%8d",q->data); q=q->next; } printf("\n"); return OK; } (6)清空链表 LinkList EmptyList(LinkList L) { free(L->data); L->next=NULL; printf("清空成功!\n"); return L; } (7)销毁链表 LinkList FreeList(LinkList L) { printf("释放成功!\n"); free(L); } (8)主函数 int main() { LinkList L=InitList(); int n,i,j; Pr(); scanf("%d",&n); while(n>0&&n<7) { switch(n) { case 1: printf("请输入要插入的结点的值和插入的位置:"); scanf("%d %d",&i,&j); InsertList(L,j,i); break; case 2: