工学院 数据结构实验报告文档格式.docx
《工学院 数据结构实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《工学院 数据结构实验报告文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
工程与设计学院前栋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<
n)
{
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)
p=(LinkList)malloc(sizeof(LNode));
p->
data=num;
next=p;
q=q->
next;
}
有序归并两个表:
顺序存储
c)
intk=0,i=0;
while(b!
=NULL||k<
a.length)
if(a.elem[k]>
b->
data)
c.elem[i++]=b->
data;
c.length=i-1;
b=b->
else
c.elem[i++]=a.elem[k++];
=NULL)
{c.elem[i++]=b->
while(k<
{
k++;
return;
链式存储
voidgetList_Sq(SqLista,LinkListb,LinkListc)
intk=0;
LNode*p=c;
while(b->
next!
=a.length)
next=b;
p=b;
LNode*q=(LinkList)malloc(sizeof(LNode));
data=a.elem[k];
next=q;
p=q;
{p->
=a.length)
{while
(1);
}
四、程序清单:
#include<
cstdlib>
#include<
iostream>
usingnamespacestd;
typedefstruct{
typedefstructLNode{
a)
cout<
<
endl<
"
A中的数据为:
endl;
a.elem[i++]<
"
;
intdisplayb(LinkListb)
B中的数据为:
data<
voidgetList_Sq(SqLista,LinkListb,LinkListc)
intdisplay(SqListc)
c中的数据为:
=c.length)
c.elem[i++]<
intdisplayc(LinkListb)
intmain(intargc,char*argv[])
SqLista;
LNode*b=(LinkList)malloc(sizeof(LNode));
intn,m,l;
请输入a中的数据个数"
cin>
n;
cout<
请创建a中的数据"
create_sq(a,n);
displaya(a);
请输入b中的数据个数"
m;
请创建b中的数据"
create_List(b,m);
displayb(b->
next);
请选择你想C要用的存放类型:
数字1,类型为链式存取,数字2为顺序存储,其他错误"
l;
if(l==1)
LinkListc=(LinkList)malloc(sizeof(LNode));
getList_Sq(a,b->
next,c);
displayc(c->
elseif(l==2)
SqListc;
getList_Sq1(a,b->
display(c);
elsecout<
输入错误"
system("
PAUSE"
);
returnEXIT_SUCCESS;
五、运行结果:
235688911111520
六、分析与总结:
1,顺序存储结构和链式存储结构有所不同,顺序存储结构是在一组连续的地址中进行存储,而链式存储结构则是通过NEXT域找到下一个元素,因此,在定义两种结构时应该区分开来。
包括后面的DISPLAY显示函数也要区分开来。
2,在创建两种线性表时,也要注意使数据停止输入的条件.
3,顺序存储结构和链式存储结构不能直接合并,因为两种结构有所不同,所以在编写程序过程中,要把顺序存储结构转化链式存储结构,如果是这种转换方式就需要将C定义为链式存储结构,如果将链式存储结构转化为顺序存储结构,则需要将C定义为顺序存储结构。
4,这是数据结构第一个实验,也是我第一次入手编数据结构的程序。
在此实验中,两输入的线性表必须得元素非递减排序,得出来的合并表才会是非递减的。
其实这个程序还不完善,必须再加上排序。
两种存储方法中,顺序存储结构所需空间开销更大,所以链式存储结构更合理。