数据结构实验指导册.docx

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

数据结构实验指导册.docx

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

数据结构实验指导册.docx

数据结构实验指导册

 

数据结构上机实验执导手册

 

目录

实验一顺序表的操作

实验二单链表的操作

实验三栈的链式存储结构的表示和实现

实验四二叉树遍历算法的设计

实验五采用邻接表实现图的DFS和BFS

附录部分程序源代码

 

实验一顺序表的操作

一.实验目的

1.了解顺序表的逻辑结构特性。

2.掌握线性表的顺序存储结构的定义及其C或C++语言实现。

3.掌握线性表顺序存储结构—顺序表的各种基本操作。

二.实验仪器设备

PC机一台

三.实验要求

1.认真阅读和掌握本实验的相关知识。

2.对给出的程序认真阅读,把相关缺失程序补充完整。

3.上机运行补充后的程序。

4.保存程序的运行结果,结合程序分析顺序结构的特点。

5.填写实验报告

四.实验内容及实验分析

1.实验内容

在VC++6.0的运行环境下,编写C或C++语言程序,利用顺序存储的方式来实现下列功能:

(1)根据键盘输入数据建立一个顺序表,并且输出该顺序表。

(2)根据屏幕菜单来选择数据的插入、删除以及查找操作。

(3)完成插入或删除数据操作后,把操作后的线性表进行输出。

(4)在完成插入、删除和查找操作后,选择菜单上的0,退出该程序的运行,结束实验内容。

2.实验分析

在顺序表的第i个位置上要求插入一个数据元素时候,先将顺序表的第i个位置元素后的所有数据元素按顺序后移一个位置,在插入的地方空出一个位置,然后把要插入的新数据元素插入到该位置,同时将表长加一。

在顺序表中删除表中第i个位置的数据元素的时候,先将该位置的数据元素删除,然后将第i个位置后的其他剩余元素按顺序依次向前移动一个位置,同时将表长减一。

顺序表中查找一个数据元素的值,需要遍历整个顺序表,如要找道该值,则返回该值在顺序表中的位置,否则继续查找。

如果遍历整个顺序表都没有找到该值,则要求函数返回-1

五.实验报告

1.总结顺序表的优缺点及顺序表在现实中可以解决的问题。

2.讨论如果按照由表尾到表头的顺序输入数据,则如何建立顺序表。

3.讨论自己在设计过程中遇到的问题、解决的过程以及收获体会。

 

实验二单链表的操作

一.实验目的

1.了解单链表的逻辑结构特性。

2.掌握单链表的链式存储结构的定义及其C或C++语言实现。

3.掌握单链表链式存储结构。

4.掌握单链表的各种基本操作。

二.实验仪器设备

PC机一台

三.实验要求

1.认真阅读和掌握本实验的相关知识。

2.对给出的程序认真阅读,把相关缺失程序补充完整。

3.上机运行补充后的程序。

4.保存程序的运行结果,结合程序分析链式结构的特点。

5.填写实验报告

四.实验内容及实验分析

1.实验内容

编写C语言程序,利用链式存储的方式来实现下列功能:

(1)根据键盘输入数据建立一个单链表,并且输出该单链表。

(2)根据屏幕菜单来选择数据的插入、删除以及查找操作。

(3)完成插入或删除数据操作后,把操作后的线性表进行输出。

(4)在完成插入、删除和查找操作后,选择菜单上的0,退出该程序的运行,结束实验内容。

2.实验分析

在单链表的第i个位置上要求插入一个数据元素时候,先生成一个存储单元S来存放插入数据元素X的值,其次修改第i个位置结点P的next域值,让其存入是结点S所在存储单元地址的值,再次修改结点S的next域的值,让S的next域的值为第i+1结点的地址值。

在单链表中删除表中第i个位置的数据元素的时候,先修改第i-1个数据元素的next域的地址值,使其值为第i+1个数据元素存储单元的地址值,最后释放第i个存储单元,使用函数free()。

在单链表中查找一个数据元素的值,需要遍历整个整个单链表,如要找道该值,则返回该值,否则继续查找。

如果遍历整个顺序表都没有找到该值,则要求函数返回-1

五实验报告

1.总结链表的优缺点及链表在现实中可以解决的问题。

2.讨论自己在设计过程中遇到的问题、解决的过程以及收获体会。

实验三栈的链式存储结构的表示和实现

一实验目的

1.了解栈的逻辑结构特性。

2.掌握栈的链式存储结构的定义。

3.掌握栈的链式结构的表示和实现。

二实验仪器设备

PC机一台

三实验要求

1.认真阅读和掌握本实验的相关知识。

2.编写程序实现栈的链式存储方式。

3.编写程序实现对栈空的判断以及栈的入栈和出栈操作、取栈顶元素。

4.保存程序的运行结果,结合程序分析链式结构的特点。

5.填写实验报告

四实验内容及实验分析

1.实验内容

编写C或C++语言程序,利用链式存储的方式来实现下列功能:

(1)初始化链栈。

(2)将链栈置空。

(3)完成入栈和出栈操作,完成取栈顶元素操作。

(4)选择菜单上的0,退出该程序的运行,结束实验内容。

2.实验分析

(1)初始化栈操作,将栈的栈顶指针置为空值,即设栈S和栈顶指针top,S→top=null。

(2)如果所建栈里有数据元素,要将其置空,同样也是将栈顶指针的值置为空值。

(3)入栈操作,向栈里插入数据元素。

首先要为插入数据元素分配结点,将插入数据元素的值赋值给插入结点的数据域,其次修改栈顶指针的指向关系,即修改插入结点和栈顶指针的地址,最后修改栈顶指针。

(4)出栈操作,从栈里删除数据元素。

首先要判断栈是否为空栈,如是空栈则操作失败。

否则,进行出栈操作,修改删除结点和栈顶指针,最后释放删除结点。

(5)取栈顶元素。

五实验报告

1.总结栈的优缺点及栈在现实中可以解决的问题。

2.讨论自己在设计过程中遇到的问题、解决的过程以及收获体会。

 

实验四二叉树遍历算法的设计

一实验目的

1.掌握二叉树的结构特征,以及各种存储结构的特点。

2.掌握二叉树在实践中的应用范围。

3.掌握用指针类型来描述、访问和遍历二叉树的操作算法。

二实验仪器设备

PC机一台

三实验要求

1.认真阅读和掌握本实验的相关知识。

2.编写程序实现二叉树的链式存储方式。

3.编写程序实现对二叉树的先序遍历、中序遍历和后序遍历的算法实现。

4.保存程序的运行结果,结合程序分析二叉树的结构特点。

5.填写实验报告

四实验内容及实验分析

1.实验内容

编写C或C++语言程序,利用链式存储的方式来实现下列功能:

(1)采用二叉树性质5来建立二叉树。

(2)完成二叉树的三种遍历算法。

(3)选择菜单上的0,退出该程序的运行,结束实验内容。

2.实验分析

(1)定义二叉树结点值的数据类型,将其定义为字符型数据,定义二叉树中结点的结构类型。

(2)利用性质5建立二叉树,设置序号为1的结点为二叉树的根结点,序号为偶数的结点为该二叉树的左孩子,序号为奇数的结点为该二叉树的右孩子。

(3)采用递归方式来遍历二叉树,也就是实现二叉树的遍历是利用递归的方法来实现,即先序递归遍历、中序递归遍历、后序递归遍历。

先序递归遍历算法描述:

1访问二叉树的根结点。

2先序遍历左子树。

3先序遍历右子树。

中序递归遍历算法描述:

1中序遍历左子树。

2访问根结点。

3中序遍历右子树。

后序递归遍历算法描述:

1后序遍历左子树。

2后序遍历右子树。

3访问根结点。

五实验报告

1.总结二叉树的优缺点及二叉树在现实中可以解决的问题。

2.讨论自己在设计过程中遇到的问题、解决的过程以及收获体会。

 

实验五采用邻接表实现图的DFS和BFS

一实验目的

1.掌握图的基本存储方法。

2.熟练掌握图的两种搜索路径的遍历方法。

3.掌握图的有关应用。

二实验仪器设备

PC机一台

三实验要求

1.认真阅读和掌握本实验的相关知识。

2.编写程序实现图的邻接表存储方式。

3.编写程序实现对图的DFS(递归)和BFS(非递归)的算法实现。

4.保存程序的运行结果,结合程序分析这两种遍历的结构特点。

5.填写实验报告

四实验内容及实验分析

1.实验内容

编写C或C++语言程序,实现图的下列功能:

(1)利用邻接表的结构特性实现对图中各个顶点的存储。

(2)利用DFS算法对图中各个顶点进行遍历并且输出遍历结果。

(3)利用BFS算法对图中各个顶点进行遍历并且输出遍历结果。

(4)选择菜单上的0,退出该程序的运行,结束实验内容。

2.实验分析

(1)建立无向图的邻接表,并且输出该无向图的邻接表。

(2)输入DFS的出发点,按照DFS遍历算法遍历图中顶点。

(3)输入BFS的出发点,由于BFS采用的是非递归形式,所以要通过建立队列来实现BFS的遍历过程。

因此,在编写该算法的过程中,就要建立队列,即队列的初始化操作、判断队是否为空、入队和出队操作。

五实验报告

1.总结BFS和DFS的优缺点。

2.总结图的邻接表存储特点。

2.讨论自己在设计过程中遇到的问题、解决的过程以及收获体会。

 

附录

顺序表程序部分代码:

#include

#include

#defineMAXSIZE20数组最大界限

typedefintElemType;数据元素类型

typedefstruct

{

ElemTypea[MAXSIZE];一维数组子域

intlength;表长度域

}SqList;顺序存储的结构体类型

SqLista,b,c;

voidcreat_list(SqList*L);

voidout_list(SqListL);

voidinsert_sq(SqList*L,inti,ElemTypee);

ElemTypedelete_sq(SqList*L,inti);

intlocat_sq(SqListL,ElemTypee);

主函数

voidmain()

{

inti,k,loc;

ElemTypee,x;

charch;

do

{

printf("\n\n\n");

printf("\n1.建立线性表");

printf("\n2.插入数据元素");

printf("\n3.删除数据元素");

printf("\n4.查找数据元素");

printf("\n0.结束程序运行");

printf("\n==========================================");

printf("\n请输入你的选择(1,2,3,4,0)");

scanf("%d",&k);

switch(k)

{

case1:

{

creat_list(&a);

out_list(a);

}break;

case2:

{

printf("\n请输入插入位置:

");

scanf("%d",&i);

printf("\n请输入要插入的数据元素值:

");

scanf("%d",&e);

insert_sq(&a,i,e);

out_list(a);

}break;

case3:

{

printf("\n请输入删除位置:

");

scanf("%d",&i);

x=delete_sq(&a,i);

out_list(a);

if(x!

=-1)

printf("\n删除数据元素为:

%d\n",x);

else

printf("要删除的数据元素不存在!

");

}break;

case4:

{

printf("\n请输入要查找的数据元素值:

");

scanf("%d",&e);

loc=locat_sq(a,e);

if(loc==-1)

printf("\n未找到指定数据元素!

");

else

printf("\n已找到,数据元素位置是%d",loc);

}break;

}

}while(k!

=0);

printf("\n按回车键,返回...\n");

ch=getchar();

}

建立线性表

voidcreat_list(SqList*L)

{

inti;

printf("请输入线性表的长度:

");

scanf("%d",&L->length);

for(i=0;ilength;i++)

{

printf("数据元素%d=",i);

scanf("%d",&(L->a[i]));

}

}

输出线性表

voidout_list(SqListL)

{

inti;

for(i=0;i<=L.length-1;i++)

{

printf("%10d",L.a[i]);

}

}

在线性表的第i个位置插入数据元素e

voidinsert_sq(SqList*L,inti,ElemTypee)

{

}

删除第i个数据元素,返回其值

ElemTypedelete_sq(SqList*L,inti)

{

}

查找值为e的元素,返回它的值

intlocat_sq(SqListL,ElemTypee)

{

inti=0;

while(i<=L.length-1&&L.a[i]!

=e)

i++;

if(i<=L.length-1)

return(i+1);

else

return(-1);

}

单链表操作的部分源代码:

#include

#include

#include

typedefintElemType;数据元素类型

typedefstructLNode

{

ElemTypedata;数据子域

structLNode*next;指针子域

}LNode;顺序存储的结构体类型

LNode*L;

LNode*creat_L();

voidout_L(LNode*L);

voidinsert_L(LNode*L,inti,ElemTypee);

ElemTypedelete_L(LNode*L,inti);

intlocat_L(LNode*L,ElemTypee);

主函数

voidmain()

{

inti,k,loc;

ElemTypee,x;

charch;

do

{

printf("\n");

printf("\n1.建立单链表");

printf("\n2.插入数据元素");

printf("\n3.删除数据元素");

printf("\n4.查找数据元素");

printf("\n0.结束程序运行");

printf("\n==========================================");

printf("\n请输入你的选择(1,2,3,4,0)");

scanf("%d",&k);

switch(k)

{

case1:

{

L=creat_L();

out_L(L);

}break;

case2:

{

printf("\n请输入插入位置:

");

scanf("%d",&i);

printf("\n请输入要插入的数据元素值:

");

scanf("%d",&e);

insert_L(L,i,e);

out_L(L);

}break;

case3:

{

printf("\n请输入删除位置:

");

scanf("%d",&i);

x=delete_L(L,i);

out_L(L);

if(x!

=-1)

{

printf("\n删除数据元素为:

%d\n",x);

printf("删除%d后的单链表为:

\n",x);

out_L(L);

}

else

printf("要删除的数据元素不存在!

");

}break;

case4:

{

printf("\n请输入要查找的数据元素值:

");

scanf("%d",&e);

loc=locat_L(L,e);

if(loc==-1)

printf("\n未找到指定数据元素!

");

else

printf("\n已找到,数据元素位置是%d",loc);

}break;

}

printf("\n-----------------------------------");

}while(k>=1&&k<5);

printf("\n按回车键,返回...\n");

ch=getchar();

}

建立线性链表

LNode*creat_L()

{

LNode*h,*p,*s;

ElemTypex;

h=(LNode*)malloc(sizeof(LNode));

h->next=NULL;

p=h;

printf("请输入第一个数据元素:

");

scanf("%d",&x);

while(x!

=-999)

{

s=(LNode*)malloc(sizeof(LNode));

s->data=x;

s->next=NULL;

p->next=s;

p=s;

printf("请输入下一个数据元素:

(输入-999表示结束。

)");

scanf("%d",&x);

}

return(h);

}

输出单链表中的数据元素

voidout_L(LNode*L)

{

LNode*p;

p=L->next;

printf("\n\n");

while(p!

=NULL)

{

printf("%5d",p->data);

p=p->next;

}

}

在单链表中的第i个位置插入数据元素e

voidinsert_L(LNode*L,inti,ElemTypee)

{

}

删除第i个数据元素,返回其值

ElemTypedelete_sq(SqList*L,inti)

{

}

查找值为e的元素,返回它的值

intlocat_L(LNode*L,ElemTypee)

{

LNode*p;

intj=1;

p=L->next;

while(p!

=NULL&&p->data!

=e)

{

p=p->next;

j++;

}

if(p!

=NULL)

return(j);

else

return(-1);

}

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

当前位置:首页 > 成人教育 > 电大

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

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