- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
湖南师范大学工程与设计学院数据结构实验报告姓名:沈毕年级:2014专业:应用电子技术学号:201430181029任课教师:肖柳明开课时间:2015~2016学年第一学期实验(一)实验时间2015年实验地点中栋603实验题目线性表的存储及操作实验目的掌握顺序存储结构和链式存储结构的特点;掌握常见算法。实验内容实验内容:已知两个按元素值有序的线性表A和B,编程实现:将A和B有序归并成一个按元素值有序的线性表。实验步骤:从键盘输入两个按元素值有序的线性表A和B的值;根据输入把数据元素分别以顺序存储结构和线性链表存储;有序归并成一个新的按元素值有序的线性表C;输出显示合并后的线性表C。测试数据:A=(3,5,8,11),B=(2,6,8,9,11,15,20)结构定义:typedef int ElemType;typedef int Status;顺序存储结构的定义:typedef struct{ElemType *elem; int length;int listsize;}SqList;线性链表结构的定义:typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkList;算法描述:先将两个表的元素从键盘输入,然后再将两个表相加,得到第三个表。在合并后的表中找到值相同的元素,将后面的元素前移以删除值相同的元素,最后将表的长度减1得到最终的结果。//顺序表LA,LB合为LCSqlist MergeList_sq(Sqlist La,Sqlist Lb, Sqlist Lc) { pa=La.elem,pb=Lb.elem,*pc;pa_last=La.elem+La.length-1;pb_last=Lb.elem+Lb.length-1;Lc.listsize=Lc.length=La.length+Lb.length;pc=Lc.elem=(int *) malloc(Lc.listsize*sizeof(int));if(!Lc.elem) //分配失败exit(0);while(pa=pa_lastpb=pb_last) { //判断La,Lb是否结尾if(*pa=*pb) //比较大小,影响插入的顺序*pc++=*pa++;else*pc++=*pb++;}while(pa=pa_last) //可能存在没有插完的情况*pc++=*pa++;while(pb=pb_last)*pc++=*pb++;return Lc;}单链表类C//合并链表La,Lb,LcLNode *MergeList_L(LinkList La,LinkList Lb,LinkList Lc) {pa=La-next; pb=Lb-next;Lc=pc=La;while(papb) {if(pa-data=pb-data) {pc-next=pa;pc=pa;pa=pa-next;}else {pc-next=pb; pc=pb;pb=pb-next;}}pc-next=pa?pa:pb;free(Lb);return Lc;}程序清单:#include stdio.h#include malloc.hstruct { int *elem; int length; int listsize; }A,B,C;struct node { int data; struct node *next; }*HA,*HB,*HC;void del_order(){ int i,j; for(i=0;iC.listsize-1;i++) { if(C.elem[i]==C.elem[i+1]) { for(j=i+2;j=C.listsize-1;j++) { C.elem[j-1]=C.elem[j]; } C.listsize--; } } printf(\n删除后线性表C的值:\n); for(i=0;iC.listsize;i++) { printf(%d ,C.elem[i]); }} merge_order(){ int i=0,j=0,k=0; C.listsize=A.listsize+B.listsize; C.elem=(int *)malloc(C.listsize*sizeof(int)); i
文档评论(0)