数据结构实验指导书v2Word文件下载.docx

上传人:b****7 文档编号:22151333 上传时间:2023-02-02 格式:DOCX 页数:126 大小:154.70KB
下载 相关 举报
数据结构实验指导书v2Word文件下载.docx_第1页
第1页 / 共126页
数据结构实验指导书v2Word文件下载.docx_第2页
第2页 / 共126页
数据结构实验指导书v2Word文件下载.docx_第3页
第3页 / 共126页
数据结构实验指导书v2Word文件下载.docx_第4页
第4页 / 共126页
数据结构实验指导书v2Word文件下载.docx_第5页
第5页 / 共126页
点击查看更多>>
下载资源
资源描述

数据结构实验指导书v2Word文件下载.docx

《数据结构实验指导书v2Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书v2Word文件下载.docx(126页珍藏版)》请在冰豆网上搜索。

数据结构实验指导书v2Word文件下载.docx

实验名称:

线性表

(一)59

堆栈

(二)61

队列(三)63

模式匹配(四)66

二叉树(五)68

查找(六)70

内部排序(七)72

图和图的遍历(八)76

设计性、综合性实验78

附录2数据结构课程设计完成情况登记表79

附录3图的应用80

实验一线性表

(一)实验目的

掌握线性表的顺序存储

掌握线性表的链式存储

掌握基本算法(建表、插入、删除)的实现

(二)实验内容

1.线性表的顺序存储:

掌握线性表的顺序存储结构及其基本操作、合并、逆置等算法

设顺序表的存储结构定义如下:

(同学们可扩展考虑其他形式的存储结构定义)

#defineLIST_INIT_SIZE100//线性表存储空间的初始分配量

#defineLISTINCREMENT10//线性表存储空间的分配增量

typedefstruct

{

int*elem;

//存储空间基址

intlength;

//当前长度

intlistsize;

//当前分配的存储容量(以sizeof(int)为单位)

}SqList;

[题目1:

编写算法,创建初始化容量为LIST_INIT_SIZE的顺序表T,并实现插入、删除、遍历操作。

本题目给出部分代码,请补全内容。

]

#include<

stdio.h>

malloc.h>

#defineOK1

#defineERROR0

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

#defineElemTypeint

int*elem;

intInitList_Sq(SqList&

L)

//算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE

//请补全代码

}

intLoad_Sq(SqList&

//输出顺序表中的所有元素

inti;

if()printf("

TheListisempty!

"

);

//请填空

else

{

printf("

TheListis:

"

for()printf("

%d"

);

}

printf("

\n"

returnOK;

intListInsert_Sq(SqList&

L,inti,inte)

//算法2.4,在顺序线性表L中第i个位置之前插入新的元素e

//i的合法值为1≤i≤L.length+1

intListDelete_Sq(SqList&

L,inti,int&

e)

//算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值

//i的合法值为1≤i≤L.length

intmain()

SqListT;

inta,i;

ElemTypee,x;

if()//判断顺序表是否创建成功,请填空

ASequenceListHasCreated.\n"

while

(1)

1:

Insertelement\n2:

Deleteelement\n3:

Loadallelements\n0:

Exit\nPleasechoose:

scanf("

%d"

&

a);

switch(a)

{

case1:

scanf("

%d%d"

i,&

x);

if()printf("

InsertError!

//判断i值是否合法,请填空

elseprintf("

TheElement%disSuccessfullyInserted!

x);

break;

case2:

i);

DeleteError!

TheElement%disSuccessfullyDeleted!

e);

case3:

Load_Sq(T);

case0:

return1;

}

测试样例格式说明:

根据菜单操作:

1、输入1,表示要实现插入操作,紧跟着要输入插入的位置和元素,用空格分开

2、输入2,表示要实现删除操作,紧跟着要输入删除的位置

3、输入3,表示要输出顺序表的所有元素

4、输入0,表示程序结束

 

[题目2:

编写算法,将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C。

本题不提供代码,请同学们独立完成,所需子函数参考前面题目1完成的内容。

[键盘输入]

第一行:

顺序表A的元素个数

第二行:

顺序表A的各元素(非递减),用空格分开

第三行:

顺序表B的元素个数

第四行:

顺序表B的各元素(非递减),用空格分开

[正确输出]

顺序表A的元素列表

顺序表B的元素列表

合并后顺序表C的元素列表

测试样例:

[第一组自测数据]

[键盘输入]

5↙

13579↙

246810↙

[正确输出]

ListA:

13579

ListB:

246810

ListC:

12345678910

[第二组自测数据]

6↙

122445628496↙

4↙

15317586↙

122445628496

15317586

12152431456275848696

[题目3:

设有一顺序表A=(a0,a1,...,ai,...an-1),其逆顺序表定义为A'

=(an-1,...,ai,...,a1,a0)。

设计一个算法,将顺序表逆置,要求顺序表仍占用原顺序表的空间。

输入顺序表的元素个数

输入顺序表的各元素,用空格分开

逆置前的顺序表元素列表

逆置后的顺序表元素列表

10↙

12345678910↙

TheturnedListis:

10987654321

8↙

3297546535846175↙

3297546535846175

7561843565549732

2.线性表的链式存储:

掌握线性表的链式存储结构及其基本操作、合并、逆置等算法。

本实验以单链表为例,在完成题目的过程中,同学们可扩展考虑双链表及循环链表等结构的操作。

设单链表的存储结构定义如下:

typedefstructLNode

intdata;

//存储在结点中的数据

structLNode*next;

//指向下一结点的指针

}LNode,*LinkList;

[题目4:

编写算法,创建一个含有n个元素的带头结点的单链表L并实现插入、删除、遍历操作。

本题目提供部分代码,请补全内容]

intCreateLink_L(LinkList&

L,intn){

//创建含有n个元素的单链表

LinkListp,q;

ElemTypee;

L=(LinkList)malloc(sizeof(LNode));

L->

next=NULL;

//先建立一个带头结点的单链表

q=(LinkList)malloc(sizeof(LNode));

q=L;

for(i=0;

i<

n;

i++){

&

e);

p=(LinkList)malloc(sizeof(LNode));

//生成新结点

//请补全代码

intLoadLink_L(LinkList&

L){

//单链表遍历

LinkListp=L->

next;

if()printf("

TheLinkListis:

while()//请填空

p->

data);

//请填空

intLinkInsert_L(LinkList&

L,inti,ElemTypee){

//算法2.9

//在带头结点的单链线性表L中第i个位置之前插入元素e

intLinkDelete_L(LinkList&

L,inti,ElemType&

e){

//算法2.10

//在带头结点的单链线性表L中,删除第i个元素,并用e返回其值

LinkListT;

inta,n,i;

ElemTypex,e;

Pleaseinputtheinitsizeofthelinklist:

n);

Pleaseinputthe%delementofthelinklist:

n);

if()//判断链表是否创建成功,请填空

ALinkListHasCreated.\n"

LoadLink_L(T);

if()printf("

elseprintf("

break;

[题目5:

设计一个算法将两个非递减有序链表A和B合并成一个新的非递减有序链表C。

本题不提供代码,请同学们独立完成,所需子函数参考题目4完成的内容。

单链表A的元素个数

单链表A的各元素(非递减),用空格分开

单链表B的元素个数

单链表B的各元素(非递减),用空格分开

单链表A的元素列表

单链表B的元素列表

合并后单链表C的元素列表

[题目6:

设有一线性表A=(a0,a1,...,ai,...an-1),其逆线性表定义为A'

=(an-1,...,ai,...,a1,a0),设计一个算法,将链式线性表逆置,要求线性表仍占用原线性表的空间。

输入n,表示单链表的元素个数

输入单链表的各元素,用空格分开

输出单链表逆置前的元素列表

输出单链表逆置后的元素列表

8↙

7562843565549732

(三)实验报告

本实验所有题目要求在JudgeOnline上提交通过。

实验报告针对以上所有实验内容。

实验目的主要是阐述本实验需要掌握的知识要点。

实验总结主要是对实验内容的掌握及理解程序作一个归纳性的叙述。

对于思考题进行分析和思考,并做出相应的结论。

本次实验报告可以在堂下完成。

实验二堆栈

(1)理解堆栈的结构及操作特点

(2)实现堆栈的PUSH、POP等基本操作算法

(3)熟练掌握入栈、出栈时栈顶指针的变化情况

(4)掌握堆栈的实际应用

1.顺序栈的基本操作

创建一个空的顺序栈,并实现栈的入栈、出栈、返回栈的长度、返回栈顶元素、栈的遍历等基本算法。

请将下面的程序补充完整。

#defineOK1

#defineSTACK_INIT_SIZE100//存储空间初始分配量

#defineSTACKINCREMENT10//存储空间分配增量

typedefintSElemType;

//定义栈元素类型

typedefintStatus;

//Status是函数的类型,其值是函数结果状态代码,如OK等

structSqStack

SElemType*base;

//在栈构造之前和销毁之后,base的值为NULL

SElemType*top;

//栈顶指针

intstacksize;

//当前已分配的存储空间,以元素为单位

};

//顺序栈

StatusInitStack(SqStack&

S)

{

//构造一个空栈S,该栈预定义大小为STACK_INIT_SIZE

StatusPush(SqStack&

S,SElemTypee)

//在栈S中插入元素e为新的栈顶元素

StatusPop(SqStack&

S,SElemType&

e)

//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;

否则返回ERROR

StatusGetTop(SqStackS,SElemType&

//若栈不空,则用e返回S的栈顶元素,并返回OK;

intStackLength(SqStackS)

//返回栈S的元素个数

StatusStackTraverse(SqStackS)

//从栈顶到栈底依次输出栈中的每个元素

SElemType*p=(SElemType*)malloc(sizeof(SElemType));

p=//请填空

TheStackisEmpty!

//请填空

TheStackis:

p--;

while()//请填空

printf("

*p);

//请填空

inta;

SqStackS;

SElemTypex,e;

AStackHasCreated.\n"

while

(1)

Push\n2:

Pop\n3:

GettheTop\n4:

ReturntheLengthoftheStack\n5:

LoadtheStack\n0:

if()printf("

PushError!

//判断Push是否合法,请填空

elseprintf("

TheElement%disSuccessfullyPushed!

break;

case2:

PopError!

//判断Pop是否合法,请填空

elseprintf("

TheElement%disSuccessfullyPoped!

break;

case3:

GetTopError!

//判断GetTop是否合法,请填空

TheTopElementis%d!

case4:

TheLengthoftheStackis%d!

case5:

//请填空

1、输入1,表示要实现Push操作,紧跟着输入要Push的元素

2、输入2,表示要实现Pop操作

3、输入3,返回栈顶元素

4、输入4,返回栈的元素个数

5、输入5,表示从栈顶到栈底输出栈的所有元素

6、输入0,表示程序结束

2.栈的应用

[题目2:

利用顺序栈的基本操作算法,编写满足下列要求的数制转换程序:

对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。

输入一个非负的十进制整数

[正确输出]

与输入等值的八进制数

测试样例

[第一组自测数据][第二组自测数据]

[键盘输入][键盘输入]

15↙38↙

[正确输出][正确输出]

1746

利用栈编写满足下列要求的括号匹配检验程序:

假设表达式中允许包含两种括号:

圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式。

输入一个包含上述括号的表达式,检验括号是否配对。

本题给出部分chech()函数,要求将check()函数补充完整,并完成整个程序。

typedefcharSElemType;

math.h>

process.h>

//exit()

#defineTRUE1

#defineFALSE0

#defineSTACK_INIT_SIZE10//存储空间初始分配量

#defineSTACKINCREMENT2//存储空间分配增量

S

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

当前位置:首页 > 高等教育 > 农学

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

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