创建链表和链表操作实验报告.doc
- 文档编号:234743
- 上传时间:2022-10-07
- 格式:DOC
- 页数:9
- 大小:615.50KB
创建链表和链表操作实验报告.doc
《创建链表和链表操作实验报告.doc》由会员分享,可在线阅读,更多相关《创建链表和链表操作实验报告.doc(9页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
报告名称创建链表和链表操作
专业网络工程
班级1001
学号201003120129
姓名张剑
指导教师陈淑红李珍辉黄哲
2012年5月4日
一、实验目的:
掌握线性表的基本操作:
插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。
二、实验内容与基本要求:
实验内容:
1.创建单链表
2.在链表上进行插入、删除操作;
3.设计一个程序,用两个单链表分别表示两个集合,并求出这两个集合的并集。
实验要求:
1.在上机前写出全部源程序;
2.能在机器上正确运行程序;
3.用户界面友好;
三、概要设计:
1.单链表的存储结构:
teypedefstructLNode{
ElemTypedate;
structLNond*next;
}LNode*LinkList;
2.单链表的插入操作:
StatusListTnsert-L(LinkLIst&L,inti,ElemTypee){
//再带头结点的单链线性表L中的第i个位置之前插入元素e
P=l;j=0;
While(p&&j P=p->next;++j; }//寻找第i-1个结点 if(! p||j>i-1)returnERROR;//i小小于1或者大于表长+1 s=(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&&j p=p->next;++j; } if(! (p->next)||j>i-1) returnERROR;//删除位置不合理 q=p->next;p->next=q->next;//删除并释放结点 e=q->datefree(q); returnOK; }//ListDelete-L 4.链表的合并操作: voidMergeList-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->date<=pb->date){ pc->next=pa;pc=pa;pa=pa->next; } else{pc->next=pb;pc=pb;pb=pb->next;} } Pc->next=pa? pa: pb;//插入剩余段 free(Lb);//释放Lb头结点 }//MergeList-L 四、详细设计: #include #include #include #include typedefintstatus; typedefcharElemType; typedefstructLnode //定义链表结点类型 {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("请输入你要输入单链中元素的个数\n"); scanf("%d",&n); scanf("%c",&m); //回车缓冲区 for(i=n;i>0;i--) {p=(Lnode*)malloc(sizeof(Lnode)); printf("请输入%2.1d个元素: ",j); scanf("%ld",&M); scanf("%c",&m); //回车缓冲区 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&&j {p=p->next; ++j; } if(! p||j>i-1){printf("输入错误! \n"); return0; } s=(Lnode*)malloc(sizeof(Lnode)); s->data=e; s->next=p->next; p->next=s; return1; } statusListdelete(LinklistL,inti,ElemType*e) { //删除单链表指定位置的元素,返回删除后的。 链表元素 Lnode*p,*q; intj=0; p=L; while(p->next&&j {p=p->next; j++; } if(! (p->next)||j>i-1){printf("输入错误! \n"); return0; } q=p->next; p->next=q->next; *e=q->data; free(q); return1; } voidprint(LinklistL) { //输出单链表中的元素 Linklistp; p=L->next; printf("输出单链表: \n"); while(p! =NULL) {printf("%5ld",p->data); p=p->next; } printf("\n"); } structLnode*inter_link(structLnode*chain1,inta,structLnode*chain2,intb) { //单链表的合并 inttemp; structLnode*head,*p1,*p2,*p3; //判断a,b大小并合并 if(a>=b) { head=p1=chain1; p2=chain2; } else { head=p1=chain2; p2=chain1; temp=a,a=b,b=temp; } p3=head; while(p2! =NULL) { p1=p1->next; p3->next=p2; p3=p2; p2=p2->next; p3->next=p1; p3=p1; } returnhead; } main() { inti,n,a,b,h; structLnode*p1,*p2; ElemTypee; printf("请输入创建的链表的个数: "); scanf("%1d",&n); switch(n) { case1: { LinklistL; initlist(&L); /*创建链表*/ Createlist(L); print(L); /*插入元素*/ printf("请输入需要插入元素的值和位置\n"); scanf("%ld",&e); scanf("%d",&i); Listinsert(L,i,e); print(L); printf("请输入需要插入元素的值和位置\n"); scanf("%ld",&e); scanf("%d",&i); Listinsert(L,i,e); print(L); /*删除元素*/ printf("请输入要删除的元素的位置: "); scanf("%d",&i); Listdelete(L,i,&e); print(L); printf("被删除元素为: %ld\n",e); };break; case2: { LinklistL,H; initlist(&L); initlist(&H); /*创建链表*/ Createlist(L); print(L); Createlist(H); print(H); L=inter_link(L,a,H,b); printf("\n合并后的链表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创建 操作 实验 报告