工学院 数据结构实验报告文档格式.docx

上传人:b****6 文档编号:19541060 上传时间:2023-01-07 格式:DOCX 页数:13 大小:32.58KB
下载 相关 举报
工学院 数据结构实验报告文档格式.docx_第1页
第1页 / 共13页
工学院 数据结构实验报告文档格式.docx_第2页
第2页 / 共13页
工学院 数据结构实验报告文档格式.docx_第3页
第3页 / 共13页
工学院 数据结构实验报告文档格式.docx_第4页
第4页 / 共13页
工学院 数据结构实验报告文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

工学院 数据结构实验报告文档格式.docx

《工学院 数据结构实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《工学院 数据结构实验报告文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

工学院 数据结构实验报告文档格式.docx

工程与设计学院前栋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,这是数据结构第一个实验,也是我第一次入手编数据结构的程序。

在此实验中,两输入的线性表必须得元素非递减排序,得出来的合并表才会是非递减的。

其实这个程序还不完善,必须再加上排序。

两种存储方法中,顺序存储结构所需空间开销更大,所以链式存储结构更合理。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1