数据结构实验报告
- 格式:docx
- 大小:435.18 KB
- 文档页数:18
A
B
C D
E F
G
主程序模块
结点单元模块
构建先序二叉树模块
二叉树遍历模块
main
CreatBTree Preorder Inorder Postorde
A
B
C D
E F
G
主程序模块
结点单元模块
构建先序二叉树模块
二叉树遍历模块
main
CreatBTree Preorder Inorder Postorde
数据结构实验报告
想必学计算机专业的同学都知道数据结构是一门比较重要的课程,那么,下面是小编给大家整理收集的数据结构实验报告,供大家阅读参考。
数据结构实验报告1
一、实验目的及要求
1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们。
本实验训练的要点是“栈”和“队列”的观点;
二、实验内容
1) 利用栈,实现数制转换。
2) 利用栈,实现任一个表达式中的语法检查(选做)。
3) 编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);
三、实验流程、操作步骤或核心代码、算法片段
顺序栈:
Status InitStack(SqStack &S)
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base)
return ERROR;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestoryStack(SqStack &S)
{
free(S.base); return OK;
}
Status ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}
Status StackEmpty(SqStack S)
{
if(S.base==S.top)
return OK;
return ERROR;
}
int StackLength(SqStack S)
{
return S.top-S.base;
}
Status GetTop(SqStack S,ElemType &e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(ElemType
*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
实验1 线性表的基本运算实验报告
实验题目:
1、 线性表顺序存储结构(顺序表)的创建、插入、删除和查找等基本操作实现。要求设计一个菜单(参见实验1参考程序),调用顺序表的上述基本操作算法,完成以下操作:
建立顺序表(13,6,8,3,9);
在第3个位置插入元素5;
删除第5个数据;
查找元素8的位序;
2、 实现单链表的上述基本操作。
实验目的:
1、 熟悉将算法转换成程序代码的过程。
2、 了解线性表的逻辑结构特性,熟练掌握线性表的存储结构的C语言描述方法。
3、 熟练掌握线性表的基本操作:查找、插入、删除等在两种存储结构(顺序结构和链式结构)上的实现。
实验要求:
1、 认真阅读和掌握实验1参考程序,进一步完善程序,实现题目1其他功能。
2、 比照题目1的程序,实现题目2的单链表运算。并比较对于线性表的基本操作的实现,使用顺序存储结构和链式存储结构各有什么优缺点。
3、 调试正确后交实验报告(电子稿),实验报告格式参考《验证性实验的实验报告要求》。
实验内容和步骤:
1. 需求分析:
通过对题目分析,本实验的主要任务是实现线性表的建立、插入、删除和查找运算。
2. 概要设计
本实验程序首先定义一个线性表顺序存储结构,类型定义见教材22页。
设计以下5个算法分别实现顺序表基本运算。
(1) 初始化运算InitList_Sq()定义见教材23页算法2.3。
(2) 插入运算ListInsert_Sq():定义见教材24页算法2.4。
(3) 删除运算ListDelete_Sq():定义见教材24页算法2.5。
(4) 查找运算LocateElem_Sq():定义见教材25页算法2.6。
(5) 顺序表输出函数PrintList_Sq()
设计主函数以菜单形式选择调用上述算法实现顺序表的运算
3. 详细设计(参见程序)
4. 调试编译程序
实验用测试数据和相关结果分析:
数据结构实验报告:编制一个Joseph约瑟夫环示例程序
2007年11月15日 星期四 19:58
编制一个Joseph约瑟夫环示例程序。
一、 需求分析
1. 输入的形式和输入值的范围
本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。
2. 输出的形式
从屏幕显示出列顺序。
3. 程序功能
提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。
4. 测试数据
(1)
输入
20
7
3 1 7 2 4 8 4
输出
6 1 4 7 2 3 5
二、 概要设计
以单向循环链表实现该结构。
1. 抽象数据类型的定义为:
ADT LNode
{
数据对象:D={ai | ai∈CharSet,i= 1,2,„,n,n≥0}
数据关系:R1={< ai-1 ,ai > | ai ∈D, I=2,„,n}
基本操作:
InitList(&L)
操作结果:构造一个最大长度ms内容为空的有序表L。
ClearList(&L)
初始条件:线性表L已经存在。
操作结果:将L重置为空表。
EmptyList(L)
初始条件:线性表L已经存在。
操作结果:若L为空表返回TRUE,否则返回FALSE。
ListLength(L)
初始条件:线性表L已经存在。
操作结果:返回L中数据元素个数。
GetElem(L, pos, &e)
初始条件:线性表L已经存在,1≤i≤ListLength(L)。
操作结果:用e返回L中第i个数据元素的值。
LocateElem(L, e) 初始条件:线性表L已经存在。
第1篇
一、实验目的
本次实验旨在通过实际操作,加深对栈这一数据结构的理解,掌握栈的基本操作,包括初始化、入栈、出栈、取栈顶元素、判栈空等。同时,通过实验练习,提高编程能力和问题解决能力。
二、实验内容
1. 栈的定义及特点
2. 栈的顺序存储结构
3. 栈的链式存储结构
4. 栈的基本操作
5. 栈的应用实例
三、实验过程
1. 栈的定义及特点
栈是一种后进先出(LIFO)的数据结构,它只允许在一端进行插入和删除操作。栈的顶元素总是最后被插入的元素,也是最先被删除的元素。
2. 栈的顺序存储结构
顺序存储结构是使用数组来实现栈。定义一个数组作为栈的存储空间,同时定义一个指针top来指示栈顶元素的位置。
3. 栈的链式存储结构
链式存储结构是使用链表来实现栈。定义一个节点结构体,其中包含数据和指向下一个节点的指针。头节点作为栈顶元素。
4. 栈的基本操作
(1)初始化:创建一个空栈,top指针指向栈底。
(2)入栈:将新元素插入到栈顶。如果栈满,则进行扩容。
(3)出栈:删除栈顶元素,并将其返回。如果栈空,则返回错误信息。 (4)取栈顶元素:返回栈顶元素的值,但不删除栈顶元素。
(5)判栈空:判断栈是否为空,如果为空,则返回true;否则,返回false。
5. 栈的应用实例
(1)括号匹配检验:利用栈判断一个字符串中的括号是否匹配。
(2)算术表达式求值:利用栈实现算术表达式求值,包括四则运算和括号。
四、实验结果与分析
1. 初始化栈
初始化栈后,栈为空,top指针指向栈底。
2. 入栈操作
将元素1、2、3依次入栈,栈的状态如下:
```
top -> 3 -> 2 -> 1
```
3. 出栈操作
依次出栈元素,栈的状态如下:
```
top -> 2 -> 1
```
4. 取栈顶元素
取栈顶元素2,栈的状态不变。
5. 判栈空
当栈中只有一个元素时,判断栈为空,返回false。
6. 括号匹配检验 对于字符串"((()))",括号匹配检验结果为true;对于字符串"(()))",括号匹配检验结果为false。