数据结构结课实验带答案.docx

上传人:b****6 文档编号:4564583 上传时间:2022-12-06 格式:DOCX 页数:36 大小:21.52KB
下载 相关 举报
数据结构结课实验带答案.docx_第1页
第1页 / 共36页
数据结构结课实验带答案.docx_第2页
第2页 / 共36页
数据结构结课实验带答案.docx_第3页
第3页 / 共36页
数据结构结课实验带答案.docx_第4页
第4页 / 共36页
数据结构结课实验带答案.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

数据结构结课实验带答案.docx

《数据结构结课实验带答案.docx》由会员分享,可在线阅读,更多相关《数据结构结课实验带答案.docx(36页珍藏版)》请在冰豆网上搜索。

数据结构结课实验带答案.docx

数据结构结课实验带答案

线性表

一、顺序表建立_新

1、定义顺序表存储结构

2、初始化顺序表为空(InitList_Sq)

3、输入顺序表数据(CreateList_Sq)

4、遍历(输出)顺序表数据(TraverseList_Sq)

5、销毁顺序表数据(DestroyList_Sq)

例如:

输入元素个数和数据如下:

5

53879

程序输出为:

5,3,8,7,9

二、单链表的建立-前插法_新

1、定义单链表存储结构

2、初始化一个空的单链表L(InitList_L)

3、用前插法创建单链表数据(CreateList_F)

4、遍历(输出)单链表表数据(TraverseList_L)

5、销毁单链表表数据(DestroyList_L)

例如:

输入单链表结点个数和数据如下:

5

97835

程序输出为:

5,3,8,7,9

三、单链表的建立-后插法_新

1、定义单链表存储结构

2、初始化一个空的单链表L(InitList_L)

3、用后插法创建单链表数据(CreateList_L)

4、遍历单链表表数据(TraverseList_L)

5、销毁单链表表数据(DestroyList_L)例如:

输入元素个数和数据如下:

5

53879

程序输出为:

5,3,8,7,9

四、顺序表的插入_新

1、定义插入函数(ListInsert_Sq)

2、在主函数中遍历输出插入前线性表中的元素

3、在主函数中输入插入元素的位置和数据信息

4、显示插入后的顺序表数据信息(TraverseList_Sq)

例如:

输入元素个数和数据如下:

5

53879

插入元素的位置和值为:

2

6

程序输出为:

5,3,8,7,9//在输入插入位置和值之前遍历输出的线性表中的数据元素

5,6,3,8,7,9

模板如下:

#include

#include

usingnamespacestd;

#defineMAXSIZE100

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintElemType;

typedefstruct{

ElemType*elem;//指向数据元素的基地址

intlength;//线性表的当前长度

}SqList;

StatusInitList_Sq(SqList*L)

{//构造一个空的顺序表L

}

StatusCreateList_Sq(SqList&L,intn)

{

}

//在此处定义顺序表插入函数ListInsert_Sq

voidTraverseList_Sq(SqList&L)

{

}

voidDestroyList_Sq(SqList&L)

{

}

intmain()

{

SqListL;

inti,n,e;

InitList_Sq(&L);

//提示:

输入元素个数:

cin>>n;

CreateList_Sq(L,n);

TraverseList_Sq(L);//遍历输出插入前线性表数据元素

//提示:

在顺序表中输入新元素插入的位置和数据:

cin>>i>>e;

//在此处编写ListInsert_Sq函数的调用语句

TraverseList_Sq(L);

DestroyList_Sq(L);

return0;

}

五、顺序表的查找—按值进行查找_新

1、定义按值查找函数(GetElem_Sq)

2、在主函数中遍历输出查找前线性表中的元素

3、在主函数中输入待查元素

4、显示待查找元素的位置

例如:

输入顺序表元素个数和数据如下:

5

53879

输入的待查找元素为:

3

程序输出结果有:

5,3,8,7,9//在查找之前遍历输出线性表中的数据元素

2//待查元素在线性表中的位置

六、顺序表的查找—按序号进行查找_新

1、定义按序查找函数(GetElem_Sq)

2、在主函数中遍历输出查找之前线性表中的元素

2、在主函数中输入待查元素在顺序表中的位序

3、显示查找后的数据

例如:

输入顺序表元素个数和数据如下:

5

53879

输入查找元素的位序为:

2

程序输出结果为:

5,3,8,7,9//在调用查找函数之前遍历输出的线性表中的数据元素

3//输出的待查元素的位序

七、单链表的插入_新

1、定义插入函数(ListInsert_L)

2、在主函数中输出插入新结点之前单链表中的结点信息(TraverseList_L)

3、在主函数中输入插入结点的位置和数据信息

4、显示插入后的单链表数据信息(TraverseList_L)

例如:

输入单链表结点个数和数据如下:

5

53879

结点插入的位置和值为:

2

6

程序输出为:

5,3,8,7,9//插入新结点之前输出的单链表中的结点信息

5,6,3,8,7,9//插入新结点之后输出的单链表中的结点信息

模板如下:

#include

usingnamespacestd;

#defineMAXSIZE100

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintElemType;

typedefstructLNode{

ElemTypedata;//结点的数据域

structLNode*next;//结点的指针域

}LNode,*LinkList;//LinkList为指向结构体LNode的指针类型

StatusInitList_L(LinkList&L)

{

//构造一个空的单链表L

}

voidCreateList_L(LinkList&L,intn)

{

}

//在此处定义单链表的插入函数ListInsert_L

voidTraverseList_L(LinkListL)

//依次输出单链表里的每个元素

{

}

StatusDestroyList_L(LinkList&L)

{

}

intmain()

{

LinkListL;//用LinkListL;替换,与#include"LinkList.h"配合

intn,i;

ElemTypee;

InitList_L(L);

//提示:

请输入单链表的结点个数:

cin>>n;

CreateList_L(L,n);

TraverseList_L(L);

//提示:

在单链表中输入结点插入的位置和数据:

cin>>i>>e;

//在此处调用单链表的插入函数

TraverseList_L(L);

DestroyList_L(L);

return0;

}

八、顺序表删除_新

1、定义删除函数(ListDelete_Sq)

2、在主函数中遍历输出插入前线性表中的元素

3、在主函数中输入被删元素的位置

4、显示删除后的线性表元素

例如:

输入顺序表元素个数和数据如下:

5

53879

输入被删元素的位置:

2

程序输出结果为:

5,3,8,7,9//删除元素之前输出的线性表中的数据元素

3//输出的被删除元素

5,8,7,9//输出删除元素之后线性表中的数据元素

九、单链表的查找-按序号查找_新

1、定义按序查找函数(GetElem_Sq)

2、在主函数中输出插入新结点之前单链表中的结点信息(TraverseList_L)

3、在主函数中输入待查元素在单链表中的位序

4、显示查找后的数据

例如:

输入单链表结点个数和数据如下:

5

53879

输入查找结点的位序为:

2

程序输出结果为:

5,3,8,7,9//插入新结点之前输出的单链表中的结点信息

3//输出该位置上的结点信息

十、单链表结点的删除_新

1、定义删除函数(ListDelete_L

2、在主函数中遍历输出删除前单链表中的结点信息

3、在主函数中输入被删结点的位置

4、显示删除后的单链表的结点信息

例如:

输入单链表结点个数和数据如下:

5

53879

输入被删结点的位置:

2

程序输出结果为:

5,3,8,7,9//删除结点之前遍历输出的单链表中的结点信息

3//输出被删除结点的结点信息

5,8,7,9//删除结点之后遍历输出的单链表中的结点信息

十一、线性表的合并_新

假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B,例如,设LA=(75311),LB=(263),合并后LA=(7531126)

1、定义线性表的顺序存储结构

2、初始化线性表(InitList_Sq)

3、创建线性表(CreateList_Sq)

4、定义线性表的合并函数(unionList_Sq),将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中,

(在合并函数中,还将包含对函数ListLengtht_Sq、ListInsert_Sq、LocateElem_Sq和GetElem_Sq的调用)

5、在主函数中输入两个线性表LA,LB,调用合并函数

6、遍历合并后的线性表LA,并输出数据(TraverseList_Sq)

例如:

输入线性表LA的元素个数和数据如下:

4

75311

输入有序表LB的元素个数和数据如下:

3

263

输出为:

7,5,3,11//输出线性表LA的数据元素

2,6,3//输出线性表LB的数据元素

7,5,3,11,2,6//输出合并后的线性表LA的数据元素

十二、有序表的合并_新

已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列.

1、定义有序表合并函数(MergeList_Sq),将两个非递减的有序表LA和LB合并为一个新的有序表LC,且LC中的数据元素仍按值非递减有序排列

(在合并函数中,还将包含对ListLengtht_Sq、ListInsert_Sq和LocateElem_Sq的调用)

2、在主函数中输出LA表的数据元素(TraverseList_Sq)

3、在主函数中输出LB表的数据元素(TraverseList_Sq)

4、在主函数中输入两个非递减的有序表LA,LB,调用合并函数

5、遍历合并后的有序表LC,并输出数据(TraverseList_Sq)

例如:

输入有序表LA的元素个数和数据如下:

4

2589

输入有序表LB的元素个数和数据如下:

6

348101220

输出为:

2,5,8,9//输出LA表的数据元素

3,4,8,10,12,20//输出LB表的数据元素

2,3,4,5,8,8,9,10,12,20//输出合并后的LC表的数据元素

十三、有序链表的合并_新

已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列.

1、用后插法创建单链表数据(CreateList_L)

2、定义遍历函数输出单链表数据(TraverseList_L)

3、定义有序链表合并函数(MergeList_L),将两个非递减的有序链表LA和LB合并为一个新的有序链表LC,且LC中的结点元素仍按值非递减有序排列

4、在主函数中输出LA和LB表的结点信息(TraverseList_L)

5、在主函数中调用合并函数(MergeList_L)

6、遍历合并后的有序链表LC,并输出结点信息(TraverseList_L)

例如:

输入有序链表LA的结点个数和数据如下:

4

2589

输入有序链表LB的结点个数和数据如下:

6

348101220

输出为:

2,5,8,9//输出LA表的结点信息

3,4,8,10,12,20//输出LB表的结点信息

2,3,4,5,8,8,9,10,12,20//输出合并后的LC表的结点信息

栈和队列

一、顺序栈的建立

1.定义顺序栈的存储结构

2.初始化顺序栈为空栈(InitStack_Sq)

3.输入要入栈的元素个数n

4.向顺序栈中压入n个元素(Push_Sq)

5.将顺序栈中的元素从栈顶到栈底依次输出(StackTraverse_Sq)

6.销毁顺序栈(DestroyStack_Sq)

例如:

5

435109

910534//遍历输出时最后一个元素后有一个空格

二、顺序栈的入栈

1.定义顺序栈入栈函数(Push_Sq)

2.输入要入栈的元素个数n

3.向顺序栈中压入n个元素

4.将顺序栈中的元素从栈顶到栈底依次输出(StackTraverse_Sq)

5.销毁顺序栈(DestroyStack_Sq)

例如:

5

628109

910826//遍历输出时最后一个元素后有一个空格

模板如下:

#include

#include

usingnamespacestd;

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintSElemType;

#defineMAXSIZE100

typedefstruct

{

SElemType*base;

SElemType*top;

intstacksize;

}SqStack;

StatusInitStack_Sq(SqStack&S)

{

}

voidDestroyStack_Sq(SqStack&S)

{

}

//在此处定义入栈函数Push_Sq

voidStackTraverse_Sq(SqStackS)

{

}

intmain()

{

SqStackS;

InitStack_Sq(S);

intn;

SElemTypee;

cin>>n;

for(inti=1;i<=n;i++)

{

cin>>e;

//此处调用入栈函数

}

StackTraverse_Sq(S);

DestroyStack_Sq(S);

return0;

}

三、顺序栈的出栈

1.定义顺序栈出栈函数(Pop_Sq)

2.定义求顺序栈栈长函数(StackLength_Sq)

3.输入要入栈的元素个数n

4.向顺序栈中压入n个元素

5.将顺序栈中的元素从栈顶到栈底依次输出(StackTraverse_Sq)

6.销毁顺序栈(DestroyStack_Sq)

例如:

4

2468

8642//遍历输出时最后一个元素后有一个空格

4

642//遍历输出时最后一个元素后有一个空格

8

3

四、顺序栈栈顶元素的获取

1.定义获取顺序栈栈顶元素函数(GetTop_Sq)

2.输入要入栈的元素个数n

3.向顺序栈中压入n个元素

4.将顺序栈中的元素从栈顶到栈底依次输出(StackTraverse_Sq)

5.获取栈顶元素

6.输出栈顶元素

7.销毁顺序栈(DestroyStack_Sq)

例如:

4

2468

8642//遍历输出时最后一个元素后有一个空格

8

五、链栈的建立

1.定义链栈的结点存储结构

2.初始化链栈为空栈(InitStack_Link)

3.输入要入栈的元素个数n

4.向链栈中压入n个元素(Push_Link)

5.从栈顶到栈底遍历链栈数据(StackTraverse_Link)

6.销毁链栈(DestroyStack_Link)

例如:

5

435109

910534//遍历输出时最后一个元素后有一个空格

六、链栈的入栈

1.定义链栈的入栈函数(Push_Link)

2.输入要入栈的元素个数n

3.向栈中压入n个元素

4.将链栈中的元素从栈顶到栈底依次输出(StackTraverse_Link)

5.销毁链栈(DestroyStack_Link)

例如:

5

12345

54321//遍历输出时最后一个元素后有一个空格

模板如下:

#include

usingnamespacestd;

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintSElemType;

#defineMAXSIZE100

typedefstructStackNode

{

SElemTypedata;

structStackNode*next;

}StackNode,*LinkStack;

StatusInitStack_Link(LinkStack&S)

{

}

voidDestroyStack_Link(LinkStack&S)

{

}

boolStackEmpty_Link(LinkStackS)

{

}

//此处定义入栈函数Push_Link

voidStackTraverse_Link(LinkStackS)

{

}

intmain()

{

LinkStackS;

intn;

SElemTypee;

InitStack_Link(S);

cin>>n;

for(inti=1;i<=n;i++)

{

cin>>e;

//此处调用入栈函数

}

StackTraverse_Link(S);

DestroyStack_Link(S);

return0;

}

七、链栈的出栈

1.定义求栈长函数(StackLength_Link)

2.定义出栈函数(Pop_Link)

3.输入要入栈的元素个数n

4.向栈中压入n个元素(Push_Link)

5.将栈中的元素从栈顶到栈底依次输出(StackTraverse_Link)

6.输出栈长

7.执行出栈操作

8.将栈中的元素从栈顶到栈底依次输出

9.输出出栈元素

10.输出栈长

11.销毁链栈(DestroyStack_Link)

例如:

5

12345

54321//遍历输出时最后一个元素后有一个空格

5

4321//遍历输出时最后一个元素后有一个空格

5

4

八、链栈栈顶元素的获取

1.定义获取栈顶元素函数(GetTop_Link)

2.输入要入栈的元素个数n

3.向栈中压入n个元素(Push_Link)

4.将栈中的元素从栈顶到栈底依次输出(StackTraverse_Link)

5.获取栈顶元素

6.输出栈顶元素

7.销毁链栈(DestroyStack_Link)

例如:

4

2468

8642//遍历输出时最后一个元素后有一个空格

8

九、循环队列的建立

1.定义循环队列的存储结构

2.初始化循环队列为空队列(InitQueue_Sq)

3.输入要入队的元素个数n

4.向循环队列中输入n个元素(EnQueue_Sq)

5.将循环队列中的元素从队头至队尾依次输出(StackQueue_Sq)

6.销毁循环队列(DestroyQueue_Sq)

例如:

5

12345

12345//遍历输出时最后一个元素后有一个空格

十、循环队列的入队

1.定义循环队列入队函数(EnQueue_Sq)

2.输入要入队的元素个数n

3.向循环队列中输入n个元素

4.将循环队列中的元素从队头至队尾依次输出(StackQueue_Sq)

5.销毁循环队列(DestroyQueue_Sq)

例如:

5

628109

628109//遍历输出时最后一个元素后有一个空格

模板如下:

#include

#include

usingnamespacestd;

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintQElemType;

#defineMAXSIZE100

typedefstruct

{

QElemType*base;

intfront;

intrear;

}SqQueue;

StatusInitQueue_Sq(SqQueue&Q)

{

}

voidDestroyQueue_Sq(SqQueue&Q)

{

}

//此处定义入队函数EnQueue_Sq

voidQueueTraverse_Sq(SqQueueQ)

{

}

intmain()

{

SqQueueQ;

QElemTypee;

InitQueue_Sq(Q);

intn;

cin>>n;

for(inti=1;i<=n;i++)

{

cin>>e;

//此处调用入队函数

}

QueueTraverse_Sq(Q);

DestroyQueue_Sq(Q);

return0;

}

十一、循环队列的出队

1.定义求循环队列队长函数(QueueLength_Sq)

2.定义循环队列的出队函数(DeQueue_Sq)

3.输入要入队的元素个数n

4.向循环队列中输入n个元素

5.将循环队列中的元素从队头至队尾依次输出(StackQueue_Sq)

6.输出队长

7.执行出队操作

8.将循环队列中的元素从队头至队尾依次输出

9.输出出队元素

10.输出队长

11.销毁循环队列(DestroyQueue_Sq)

例如:

5

12345

12345//遍历输出时最后一个元素后有一个空格

5

2345//遍历输出时最后一个元素后有一个空格

1

4

十二、循环队列队头元素的获取

1.定义获取循环队列队头元素函数(GetHead_Sq)

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

当前位置:首页 > 高中教育 > 高中教育

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

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