《湖南师范大学工程与设计学院数据结构实验报告》由会员分享,可在线阅读,更多相关《湖南师范大学工程与设计学院数据结构实验报告(45页珍藏版)》请在金锄头文库上搜索。
1、数据结构实验报告湖南师范大学工程与设计学院数据结构实验报告姓 名: 年 级:2015级专 业:计算机科学与技术学 号:任课教师:开课时间:20162017学年第一学期实验(一)实验时间2016年12月8日星期四实验地点前栋403实验题目线性表的存储及操作实验目的1) 掌握顺序存储结构和链式存储结构的特点;2) 掌握常见算法。实验内容一内容:已知两个按元素值有序的线性表A和B,编程实现:将A和B有序归并成一个按元素值有序的线性表,然后删除值相同的元素。二步骤:1) 从键盘输入两个按元素值有序的线性表A和B的值;2) 根据输入把数据元素分别以顺序存储结构和线性链表存储;3) 有序归并成一个新的按元
2、素值有序的线性表C;4) 输出显示合并后的线性表C;5) 分别在顺序存储结构和线性链表存储结构上删除值相同的元素,并显示删除后的线性表。 一结构定义(逻辑结构、存储结构):struct Node int *elem; int length; int listsize; A,B,C;struct node int data; struct node *next; *HA,*HB,*HC;二.算法描述(类C语言+流程图):先将两个表的元素从键盘输入,然后再将两个表相加,得到第三个表。在合并后的表中找到值相同的元素,将后面的元素前移以删除值相同的元素,最后将表的长度减1得到最终的结果。/顺序表LA,
3、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_last&pb=pb_last) /判断La,Lb是否结尾i
4、f(*pa=*pb) /比较大小,影响插入的顺序*pc+=*pa+;else*pc+=*pb+;while(pa=pa_last) /可能存在没有插完的情况*pc+=*pa+;while(pbnext; pb=Lb-next;Lc=pc=La;while(pa&pb) if(pa-datadata) 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 #include struct Nod
5、e 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.elemi=C.elemi+1) for(j=i+2;j=C.listsize-1;j+) C.elemj-1=C.elemj; C.listsize-; printf(n删除后线性表C的值:n); for(i=0;iC.listsize;i+) printf(%d ,C.elemi);
6、int merge_order() int i=0,j=0,k=0; C.listsize=A.listsize+B.listsize; C.elem=(int *)malloc(C.listsize*sizeof(int); if(C.elem=NULL) return 0; while(iA.listsize&jB.listsize) if(A.elemiB.elemj) C.elemk+=A.elemi+; else C.elemk+=B.elemj+; while(iA.listsize) C.elemk+=A.elemi+; while(jB.listsize) C.elemk+=B
7、.elemj+; printf(线性表C的值为:n); for(k=0;kC.listsize;k+) printf(%d , C.elemk); del_order();int creat_order() int i; printf(请输入线性表A和表B的长度:n); scanf(%d%d,&A.listsize,&B.listsize); A.length=A.listsize; B.length=B.listsize; A.elem=(int *)malloc(A.listsize*sizeof(int); B.elem=(int *)malloc(B.listsize*sizeof(i
8、nt); if(A.elem=NULL|B.elem=NULL) return 0; printf(请有序输入线性表A的值n); for(i=0;iA.listsize;i+) scanf(%d,&(A.elemi); printf(请有序输入线性表B的值n); for(i=0;inext;while(q!=NULL)if(q-data!=p-data) printf(%d ,q-data);p=q;q=q-next;void merge_list() struct node *pa,*pb,*q; HC=q=(struct node *)malloc(sizeof(struct node);
9、 while(HA!=NULL&HB!=NULL) if(HA-datadata) q-next=HA; HA=HA-next; else q-next=HB; HB=HB-next; q=q-next; while(HA!=NULL) q-next=HA; HA=HA-next; q=q-next; while(HB!=NULL) q-next=HB; HB=HB-next; q=q-next; q=NULL; printf(线性表C的值为:n); for(q=HC-next;q!=NULL;q=q-next) printf(%d ,q-data); del_list();void crea
10、t_list() struct node *p,*q; int la,lb; printf(n请输入线性表A和B的长度:n); scanf(%d%d,&la,&lb); HA=p=(struct node *)malloc(sizeof(struct node); printf(请输入线性表A的值:n); while(la-0) scanf(%d,&p-data); q=p; p=(struct node *)malloc(sizeof(struct node); q-next=p; q-next=NULL; HB=p; printf(请输入线性表B的值:n); while(lb-0) scanf(%d,&p-data); q=p; p=(struct node *)malloc(sizeof(struct node); q-next=p; q-next=NULL; merge_list(); main() char ch;GO:printf(a:顺序存储nb:线性链表n); ch=getchar(); if(ch=a) creat_order(); else if(ch=b