1、创建链表和链表操作实验报告创建链表和链表操作实验报告数据结构实验报告报告名称 创建链表和链表操作 专 业网络工程 班 级1001 学号20XX03120XX9 姓 名张剑 指导教师陈淑红李珍辉 黄哲20XX年5月 4 日、实验目的:掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。二、 实验内容与基本要求:实验内容:1. 创建单链表2. 在链表上进行插入、删除操作;3 .设计一个程序,用两个单链表分别表示两个集合, 并求出这两个集合的并集。实验要求:1. 在上机前写出全部源程序; 2 .能在机器上正确运行程序;3 .用户界面友好;三、 概要设计:1
2、.单链表 的存储 结构: teypedef structLNode ElemType date;struct LNond *next; LNode *LinkList;2. 单链表的插入操作:Status ListTnsert-L(LinkLIst &L, int i, ElemType e )/再带头结点的单链线性表 L中的第i个位置之前插入元素 e P=l; j=0;While(p&jnext;+j;/寻找第i-1个结点if(!p|ji-1) return ERROR; /i 小小于 1 或者大 于表长 +1 s=(LinkList) malloc (sizeof(LNode); /生成新
3、结点 s-date=e; s-next=p-next; / 插入 L 中p-next=s; return ok;/ListTnsert L3. 单链表的删除操作:Status ListDelete-L(LinkLlst &L, int i, ElemType &e )/在带头结点单链线性表 L中,删除低i个元素,并e返回其值p=l; j=0;while(p-next&jnext; +j; if(!(p-next)|ji-1)return ERROR; / 删除位置不合理删除并释放结点q=p-n ext ; p-n ext=q-n ext; /e=q-date free(q); return O
4、K; /ListDelete-L4. 链表的合并操作:void MergeList-L(LinkList & La, LinkList & Lb,LinkList &Lc) / 已知单链表La和Lb的元素值/合并单链表La和Lb,得到新的单链表 Lc pa=La-next; pb=Lb-next;lc=pc=La; /用La的头结点作为Lc的 头结点 while(pa&pb) if(pa-datedate)pc-n ext =pa; pc=pa; pa=pa-n ext; else pc-n ext=pb;pc=pb;pb=pb-n ext; Pc-next=pa pa:pb; / 插入剩余段
5、 free(Lb); / 释放Lb头结点 /MergeList-L 四、详细设计:#include #include #include #include typedefint status;typedef char ElemType; typedef struct LnodeElemType data;/定义链表结点类型struct Lnode *next; Lnode,*Linklist;status initlist(Linklist *L) / 单链表的初始化 *L=(Lnode *)malloc(sizeof(Lnode); / 创建头结点 (*L)-next=NULL; return
6、 1; status Createlist(Linklist L) Lnode *p,*q;int i,j=1,n;ElemType m,M; q=L;请输入你要输入单链中元素的个数np=(Lnode *)malloc(sizeof(Lnode);请输入个元素: scanf(p-n ext=q-n ext;j+; return 1; status Listinsert(Linklist int j=0;输入错误!n return0; s=(Lnode *)malloc(sizeof(Lnode); s-data=e;/创建自己规定长度的单链表 /回车缓冲区/回车缓冲区 /向单链表指定位置插入一
7、个元素s-next=p-next; p-next=s; return 1; status Listdelete(Linklist L,int i,ElemType *e) /删除单链表指定位置的元素,返回删除后的。链表元素 Lnode *p,*q; in t j=0; p=L;while(p-next&jnext; j+; 输入错误!nreturn 0; q=p-next;p-n ext=q-n ext; *e=q-data; free(q); retu rn1; void print(Linklist L) /输出单链表中的元素Linklist p; p=L-next;输出单链表:n whi
8、le(p!=NULL)pri ntf( p=p-n ext; printf( struct Lnode * inter_link(struct Lnode * chainl,int a, struct Lnode * chain2, int b) / 单链表的合并 int temp;struct Lnode *head, *p1, *p2, *p3; / 判断 a, b大小并合并if (a = b) head =pl =chainl;p2 =chain2;else head =pl =chain2;p2 =chainl;temp =a, a=b, b = temp;p3 = head;whil
9、e (p2 != NULL) pl = p1- n ext; p3-n ext = p2; p3 = p2;p2 = p2-n ext; p3-n ext = p1; p3 = p1; return head; main int i,n,a,b,h;struct Lnode*p1,*p2; ElemType e;请输入创建的链表的个数: scanf(switch(n) case 1: Linklist L; initlist (&L);/* 创建链表 */ Createlist(L); print(L);/*插入元素*/请输入需要插入元素的值和位置nListinsert(L,i,e);请输入需
10、要插入元素的值和位置scanf(print(L);print(L);n scanf(Listinsert(L,i,e);/*删除元素*/请输入要删除的元素的位置 : scanf(Listdelete(L,i, &e); print(L);被删除元素为:ldn ;break; case 2:Createlist(H); print(H);L = inter_link(L, a, H, b);合并后的链表:n : print(L); ;break; default:printf( 五、调试分析及测试结果: 测试数据:1. ;2. 在5之前插入4, 7,并删除11求集合1 , 12 , 8, 6,
11、4, 9和2 , 5, 12 , 7 , 4的并集测试结果及分析:1. 运行程序,首先进入选择界面,选择输入需要创建的链表数为1个,输入单链表中的 元素个数为六个。按照操 作要求一次输入六个元素 3,9 , 5,6 , 11,8。按回车键结束, 此时程序输出单链表,单链表创建成功。图1:单链表的创建与输出2. 当程序弹出“请输入需要插入元素的值和位置时”执行单链表的插入操作。 按要求输入需要4,插入元素的值“ 4”和元素的位置“ 3”,按回车结束,重新输出单链表,插入 成功。图2:单链表的插入操作 3.进行删除操作,根据提示输 入删除元素的位置“ 7”,输出单链表后,第七个语速消失,元素删除成
12、功。图3:单链表的删除操作4.单链表的合并:再一次运行程序,选择需要创建链表 的个数为2个。按照提示一次输入两个单链表的元素个数和 元素值;按回车键结束,此时进行两个单链表的合并操作, 输入合并后的链表。图4:链表的合并六、实验心得及经验教训:于c语言没学好,刚开始做实验时感到无从下手,根本 不知道怎样去写源代码。后来通过参考书籍和上网查阅资 料,依样画葫芦的弄出了代码,但在程序上一编译,出现了 很多错误,根本就不能运行。在编译器的中找到出错的地方, 一个个的去改正,有些是于粗心造成的,有些是因为没有定 义造成的。最常见的就是漏掉“;”和大小写不分。但有些 程序改了好几遍的都该不过来,这就需要
13、不断的去尝试, again and again , 虽然心里会觉得很烦,但改出来,就会有一种成就感,并非得不偿失。通过本次实验,我知道了写 程序是一个循序渐进的过程,并不能一口就吃一个胖子;其 次,还要又足够的耐心。 当然,扎实的专业知识是少不了的, 因此,上课要认真听讲,课外要花点时间巩固提高。这样, 做实验写程序时就不会手忙脚乱!数据结构实验报告报告名称 创建链表和链表操作 专 业网络工程 班 级1001 学号20XX03120XX9 姓 名张剑 指导教师陈淑红李珍辉 黄哲20XX年5月 4 日、实验目的:掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结
14、构上的运算。二、 实验内容与基本要求:实验内容:1. 创建单链表2. 在链表上进行插入、删除操作;3 .设计一个程序,用两个单链表分别表示两个集合, 并求出这两个集合的并集。实验要求:1. 在上机前写出全部源程序; 2 .能在机器上正确运行程序;3 .用户界面友好;三、 概要设计:1.单链表 的存储 结构: teypedef struct LNode ElemType date;struct LNond *next; LNode *LinkList;2. 单链表的插入操作:Status ListTnsert-L(LinkLlst &L, int i, ElemType e )/再带头结点的单链
15、线性表 L中的第i个位置之前插入元素 e P=l; j=0;While(p&jnext;+j;/寻找第i-1个结点if(!p|ji-1) return ERROR; /i 小小于 1 或者大 于表长 +1 s=(LinkList) malloc (sizeof(LNode); /生成新结点 s-date=e; s-next=p-next; / 插入 L 中p-next=s; return ok;/ListTnsert L3. 单链表的删除操作:Status ListDelete-L(LinkLIst &L, int i, ElemType &e )/在带头结点单链线性表 L中,删除低i个元素,
16、并e返回其值p=l; j=0;while(p-next&jnext; +j; 删除并释放结点if(!(p-next)|ji-1) return ERROR; / 删除位置不合理q=p-n ext ; p-n ext=q-n ext; / /ListDelete-L4. 链表的合并操作:void MergeList-L(LinkList & La, LinkList & Lb,LinkList &Lc) / 已知单链表La和Lb的元素值/合并单链表La和Lb,得到新的单链表 Lc pa=La-next; pb=Lb-next;lc=pc=La; /用La的头结点作为Lc的 头结点 while(p
17、a&pb) if(pa-datedate)pc-n ext =pa; pc=pa; pa=pa-n ext; else pc-n ext=pb;pc=pb;pb=pb-n ext; Pc-next=pa pa:pb; / 插入剩余段 free(Lb); / 释放Lb头结点 /MergeList-L 四、详细设计:#include #include #include #include typedefint status;typedef char ElemType; typedef struct LnodeElemType data;/定义链表结点类型struct Lnode *next;Lnod
18、e,*Linklist;status initlist(Linklist *L)/单链表的初始化 *L=(Lnode *)malloc(sizeof(Lnode); /创建头结点 (*L)-next=NULL;return 1;Lnode *p,*q;status Createlist(Linklist L) int i,j=1,n;ElemType m,M; q=L;请输入你要输入单链中元素的个数nscanf( p-data=M;q-n ext=p; q=p;L,int i,ElemType e)+j; Lnode *p=L,*s; while(p&jnext;p=(Lnode *)mall
19、oc(sizeof(Lnode);请输入个元素: scanf(p-n ext=q-n ext;j+; return 1; status Listinsert(Linklist int j=0;输入错误!n return0; s=(Lnode *)malloc(sizeof(Lnode); s-data=e;/创建自己规定长度的单链表 /回车缓冲区/回车缓冲区 /向单链表指定位置插入一个元素 s-next=p-next; p-next=s; return 1; status Listdelete(Linklist L,int i,ElemType *e) /删除单链表指定位置的元素,返回删除后的
20、。链表元素 Lnode *p,*q; in t j=0; p=L;while(p-next&jnext;j+; 输入错误!nreturn 0; q=p-next;p-n ext=q-n ext; *e=q-data; free(q); retu rn1; void print(Linklist L) /输出单链表中的元素Linklist p; p=L-next;输出单链表:n while(p!=NULL)pri ntf( p=p-n ext; printf( struct Lnode * inter_link(struct Lnode * chainl,int a, struct Lnode * chain2, int b) / 单链表的合并 int temp;struct Lnode *head, *p1, *p2, *p3; / 判断 a, b大小并合并 if (a = b) head = pl = chainl;p2 = chain2;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1