工学院 数据结构实验报告.docx
- 文档编号:6527288
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:13
- 大小:32.58KB
工学院 数据结构实验报告.docx
《工学院 数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《工学院 数据结构实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
工学院数据结构实验报告
湖南师范大学工程与设计学院
数据结构实验报告
姓名:
钟智君
年级:
2013
专业:
计算机科学与技术
学号:
2013180502
任课教师:
肖柳明
开课时间:
2014~2015学年第一学期
实验
(一)
实验时间
2014年11月14日下午1:
00—4:
00
实验地点
工程与设计学院前栋403
实验题目
线性表的存储及操作
实验目的
1)掌握顺序存储结构和链式存储结构的特点;
2)掌握常见算法。
实验内容
已知两个按元素值有序的线性表A和B,编程实现:
将A和B有序归并成一个按元素值有序的线性表。
一、算法基本思想:
1)从键盘输入两个按元素值有序的线性表A和B的值;
2)根据输入把数据元素分别以顺序存储结构和线性链表存储;
3)有序归并成一个新的按元素值有序的线性表C;
4)输出显示合并后的线性表C。
测试数据:
A=(3,5,8,11),B=(2,6,8,9,11,15,20)
二、结构定义:
顺序存储结构:
typedefstruct{
intelem[100];
intlength;
intlistsize;
}SqList;
t
链式存储结构:
typedefstructLNode{
intdata;
structLNode*next;
}LNode,*LinkList;
intcreate_sq(SqList&a,intn){}
intdisplaya(SqList&a){}
intcreate_List(LinkList&b,intn){}
intdisplayb(LinkListb){}
voidgetList_Sq(SqLista,LinkListb,LinkListc){}
voidgetList_Sq1(SqLista,LinkListb,SqList&c){}
intdisplay(SqListc){}
intdisplayc(LinkListb){}
intmain(intargc,char*argv[]){}
三、算法描述:
设两个指针分别指向LA表和LB表中某个元素,若设i当前所指元素为a,j当前所指元素为b,则插入LC中元素c=min(a,b)。
i和j的初值都为1,在所指元素插入LC后,在LA和LB中顺序后移。
创建顺序表:
intcreate_sq(SqList&a,intn)
{
intnum;
inti=0;
while(i { cin>>num; a.elem[i]=num; a.length=i++; } return1; } 创建链表 intcreate_List(LinkList&b,intn) { LNode*q=b; q->next=NULL; LNode*p; for(inti=n;i>0;--i) { intnum; p=(LinkList)malloc(sizeof(LNode)); cin>>num; p->data=num; p->next=NULL; q->next=p; q=q->next; } } 有序归并两个表: 顺序存储 voidgetList_Sq1(SqLista,LinkListb,SqList&c) { intk=0,i=0; while(b! =NULL||k if(a.elem[k]>b->data) { c.elem[i++]=b->data; c.length=i-1; b=b->next; } else { c.elem[i++]=a.elem[k++]; c.length=i-1; } while(b! =NULL) {c.elem[i++]=b->data; b=b->next; c.length=i-1;} while(k { c.elem[i++]=a.elem[k++]; k++; c.length=i-1; } return; } 链式存储 voidgetList_Sq(SqLista,LinkListb,LinkListc) { intk=0; LNode*p=c; while(b->next! =NULL||k<=a.length) if(a.elem[k]>b->data) { p->next=b; p=b; b=b->next; p->next=NULL; } else { LNode*q=(LinkList)malloc(sizeof(LNode)); q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; } while(b! =NULL) {p->next=b; p=b; b=b->next;} while(k<=a.length) {while (1); LNode*q=(LinkList)malloc(sizeof(LNode)); q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; } return; } 四、程序清单: #include #include usingnamespacestd; typedefstruct{ intelem[100]; intlength; intlistsize; }SqList; typedefstructLNode{ intdata; structLNode*next; }LNode,*LinkList; intcreate_sq(SqList&a,intn) { intnum; inti=0; while(i { cin>>num; a.elem[i]=num; a.length=i++; } return1; } intdisplaya(SqList&a) { inti=0; cout< "< while(i<=a.length) { cout< } cout< } intcreate_List(LinkList&b,intn) { LNode*q=b; q->next=NULL; LNode*p; for(inti=n;i>0;--i) { intnum; p=(LinkList)malloc(sizeof(LNode)); cin>>num; p->data=num; p->next=NULL; q->next=p; q=q->next; } } intdisplayb(LinkListb) { cout< "< while(b! =NULL) { cout< b=b->next; } cout< } voidgetList_Sq(SqLista,LinkListb,LinkListc) { intk=0; LNode*p=c; while(b->next! =NULL||k<=a.length) if(a.elem[k]>b->data) { p->next=b; p=b; b=b->next; p->next=NULL; } else { LNode*q=(LinkList)malloc(sizeof(LNode)); q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; } while(b! =NULL) {p->next=b; p=b; b=b->next;} while(k<=a.length) {while (1); LNode*q=(LinkList)malloc(sizeof(LNode)); q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; } return; } voidgetList_Sq1(SqLista,LinkListb,SqList&c) { intk=0,i=0; while(b! =NULL||k if(a.elem[k]>b->data) { c.elem[i++]=b->data; c.length=i-1; b=b->next; } else { c.elem[i++]=a.elem[k++]; c.length=i-1; } while(b! =NULL) {c.elem[i++]=b->data; b=b->next; c.length=i-1;} while(k { c.elem[i++]=a.elem[k++]; k++; c.length=i-1; } return; } intdisplay(SqListc) { inti=0; cout< "< while(i<=c.length) { cout< } cout< } intdisplayc(LinkListb) { cout< "< while(b! =NULL) { cout< b=b->next; } cout< } intmain(intargc,char*argv[]) { SqLista; LNode*b=(LinkList)malloc(sizeof(LNode)); intn,m,l; cout<<"请输入a中的数据个数"< cin>>n; cout<<"请创建a中的数据"< create_sq(a,n); displaya(a); cout<<"请输入b中的数据个数"< cin>>m; cout<<"请创建b中的数据"< create_List(b,m); displayb(b->next); cout<<"请选择你想C要用的存放类型: "< cout<<"数字1,类型为链式存取,数字2为顺序存储,其他错误"< cin>>l; if(l==1) { LinkListc=(LinkList)malloc(sizeof(LNode)); getList_Sq(a,b->next,c); displayc(c->next); } elseif(l==2) { SqListc; getList_Sq1(a,b->next,c); display(c); } elsecout<<"输入错误"< system("PAUSE"); returnEXIT_SUCCESS; } 五、运行结果: 235688911111520 六、分析与总结: 1,顺序存储结构和链式存储结构有所不同,顺序存储结构是在一组连续的地址中进行存储,而链式存储结构则是通过NEXT域找到下一个元素,因此,在定义两种结构时应该区分开来。 包括后面的DISPLAY显示函数也要区分开来。 2,在创建两种线性表时,也要注意使数据停止输入的条件. 3,顺序存储结构和链式存储结构不能直接合并,因为两种结构有所不同,所以在编写程序过程中,要把顺序存储结构转化链式存储结构,如果是这种转换方式就需要将C定义为链式存储结构,如果将链式存储结构转化为顺序存储结构,则需要将C定义为顺序存储结构。 4,这是数据结构第一个实验,也是我第一次入手编数据结构的程序。 在此实验中,两输入的线性表必须得元素非递减排序,得出来的合并表才会是非递减的。 其实这个程序还不完善,必须再加上排序。 两种存储方法中,顺序存储结构所需空间开销更大,所以链式存储结构更合理。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学院 数据结构实验报告 数据结构 实验 报告