欢迎来到天天文库
浏览记录
ID:41107611
大小:20.85 KB
页数:13页
时间:2019-08-16
《2019创建链表和链表操作实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、创建链表和链表操作实验报告 数据结构实验报告 报告名称 创建链表和链表操作 专 业 网络工程 班 级 1001 学 号 20XX03120XX9 姓 名 张剑 指导教师 陈淑红李珍辉黄哲 20XX年5月4日 一、实验目的: 掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。 二、实验内容与基本要求: 实验内容: 1.创建单链表 2.在链表上进行插入、删除操作; 3.设计一个程序,用两个单链表分别表示两个集合,并求出这两个集合的并集。 实验要
2、求: 1.在上机前写出全部源程序;2.能在机器上正确运行程序;3.用户界面友好; 三、概要设计: 1.单链表的存储结构:teypedefstructLNode{ElemTypedate; structLNond*next;}LNode*LinkList; 2.单链表的插入操作: StatusListTnsert-L(LinkLIst&L,inti,ElemTypee){ //再带头结点的单链线性表L中的第i个位置之前插入元素eP=l;j=0; While(p&&jnext;++j; }//寻找第i-1个结点 if(!p
3、
4、
5、j>i-1)returnERROR; //i小小于1或者大于表长+1s=(LinkList)malloc(sizeof(LNode)); //生成新结点s->date=e;s->next=p->next; //插入L中p->next=s;returnok; }//ListTnsertL 3.单链表的删除操作: StatusListDelete-L(LinkLIst&L,inti,ElemType&e){ //在带头结点单链线性表L中,删除低i个元素,并e返回其值p=l;j=0; while(p->next&&jnext;+
6、+j;} if(!(p->next)
7、
8、j>i-1) returnERROR;//删除位置不合理 q=p->next;p->next=q->next;//删除并释放结点e=q->date free(q);returnOK; }//ListDelete-L 4.链表的合并操作: voidMergeList-L(LinkList&La,LinkList&Lb,LinkList&Lc){//已知单链表La和Lb的元素值 //合并单链表La和Lb,得到新的单链表Lcpa=La->next;pb=Lb->next; lc=pc=La
9、;//用La的头结点作为Lc的头结点 while(pa&&pb){if(pa->datedate){ pc->next=pa;pc=pa;pa=pa->next;} else{pc->next=pb;pc=pb;pb=pb->next;}} Pc->next=papa:pb;//插入剩余段free(Lb);//释放Lb头结点 }//MergeList-L四、详细设计: #include#include#include#includetypedefintstatus; typedefcharElemType;typedefstr
10、uctLnode {ElemTypedata; //定义链表结点类型 structLnode*next; }Lnode,*Linklist; statusinitlist(Linklist*L) { //单链表的初始化 *L=(Lnode*)malloc(sizeof(Lnode));//创建头结点 (*L)->next=NULL; return1; } statusCreatelist(LinklistL){ Lnode*p,*q;inti,j=1,n; ElemTypem,M;q=L; printf
11、(请输入你要输入单链中元素的个数\scanf(scanf( for(i=n;i>0;i--) {p=(Lnode*)malloc(sizeof(Lnode)); printf(请输入%个元素: scanf( scanf( p->data=M; p->next=q->next; q->next=p; q=p; j++; } return1; } statusListinsert(LinklistL,inti,ElemTypee){ intj=0; Lnode*p=L,*s;while(p&&
12、jnext; ++j; } if(!p
13、
14、j>i-1){printf(输入错误!\return0; } s=(Lnode*)malloc(sizeof(Lnod
此文档下载收益归作者所有