数据结构实验报告全集
《数据结构》实验报告

苏州科技学院数据结构(C语言版)实验报告专业班级测绘1011学号10201151姓名XX实习地点C1 机房指导教师史守正目录封面 (1)目录 (2)实验一线性表 (3)一、程序设计的基本思想,原理和算法描述 (3)二、源程序及注释(打包上传) (3)三、运行输出结果 (4)四、调试和运行程序过程中产生的问题及采取的措施 (6)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (6)实验二栈和队列 (7)一、程序设计的基本思想,原理和算法描述 (8)二、源程序及注释(打包上传) (8)三、运行输出结果 (8)四、调试和运行程序过程中产生的问题及采取的措施 (10)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (10)实验三树和二叉树 (11)一、程序设计的基本思想,原理和算法描述 (11)二、源程序及注释(打包上传) (12)三、运行输出结果 (12)四、调试和运行程序过程中产生的问题及采取的措施 (12)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (12)实验四图 (13)一、程序设计的基本思想,原理和算法描述 (13)二、源程序及注释(打包上传) (14)三、运行输出结果 (14)四、调试和运行程序过程中产生的问题及采取的措施 (15)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (16)实验五查找 (17)一、程序设计的基本思想,原理和算法描述 (17)二、源程序及注释(打包上传) (18)三、运行输出结果 (18)四、调试和运行程序过程中产生的问题及采取的措施 (19)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (19)实验六排序 (20)一、程序设计的基本思想,原理和算法描述 (20)二、源程序及注释(打包上传) (21)三、运行输出结果 (21)四、调试和运行程序过程中产生的问题及采取的措施 (24)五、对算法的程序的讨论、分析,改进设想,其它经验教训 (24)实验一线性表一、程序设计的基本思想,原理和算法描述:程序的主要分为自定义函数、主函数。
数据结构顺序表实验报告全集文档

数据结构顺序表实验报告全集文档 (可以直接使用,可编辑 实用优质文档,欢迎下载) 洛阳理工学院实验报告 系别 计算机 班级 学号 姓名 课程名称 数据结构 实验日期 10/23 实验名称 顺序表的基本操作 成绩 实验目的: 熟悉掌握线性表顺序存储结构,掌握与应用顺序表的查找、插入、删除等基本操作算法,训练和提高结构化程序设计能力及程序调试能力。 实验条件: 计算机一台,Visual C++6.0 实验内容: 1. 问题描述 以顺序表为存储结构实现以下基本操作: (1) 在第i个元素前插入一个新元素。 (2) 查找值为x的某个元素。若成功,给出x在表中的位置;不成功给出提示信息。 (3) 删除第i个元素,若成功,给出提示信息并显示被删元素的值;不成功给出失败的提示信息。 2. 数据结构类型定义 typedef struct { ElemTypeelem[MAXSIZE]; Intlast; }SeqList;
3. 模块划分 (1)创建顺序表输入函数:void Input(SeqList *L,int n); (2)创建顺序表输出函数:void Output(SeqList *L); (3)创建顺序表的内容查找函数:int Locate(SeqList L,ElemType e); (4)创建顺序表的插入函数:int InsList(SeqList *L,int i,ElemType e); (5)创建顺序表的删除函数: int DelList(SeqList *L,int i,ElemType *e); (6)主函数:void main() 4. 详细设计 #include #include #include #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 //最大长度 typedef struct { ElemType elem[MAXSIZE]; int last; }SeqList; void Input(SeqList *L,int n) //输入函数 { int i; printf("请输入线性表的各元素值:\n"); for(i=0; iscanf("%d",&L->elem[i]); } void Output(SeqList *L) //输出函数 { int i; for(i=0; i<=L->last; i++) printf("%2d,",L->elem[i]); printf("\n"); } int Locate(SeqList L,ElemType e)//内容查找函数 { int i; i=0; while((i<=L.last)&&(L.elem[i])!=e) i++; if(i<=L.last) return(i+1); //返回序号 else return(-1); } int InsList(SeqList *L,int i,ElemType e)//插入数据 { int k; if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/ { printf("插入位置不合法\n"); return(ERROR); } if(L->last>= MAXSIZE-1) { printf("表已满无法插入"); return(ERROR); } for(k=L->last;k>=i-1;k--) //为插入元素而移动位置 L->elem[k+1]=L->elem[k]; L->elem[i-1]=e; //第i个元素的下标为i-1 L->last++; return(OK); } int DelList(SeqList *L,int i,ElemType *e) //删除函数 /*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */ { int k; if((i<1)||(i>L->last+1)) { printf("删除位置不合法!\n"); return(ERROR); } *e = L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/ for(k=i; k<=L->last; k++) L->elem[k-1] = L->elem[k]; /*将后面的元素依次前移*/ L->last--; return(TRUE); } void main()//主函数 {SeqList l,*la; int p,q,r,k,j ,m,num; printf("请输入线性表的长度:"); scanf("%d",&r); l.last = r-1; la=&l; Input(la,la->last+1); Output(la); //按内容查找元素 printf("请输入要查找的元素值:\n"); scanf("%d",&q); p=Locate(l,q); if(p == -1) printf("在此线性表中没有该元素! \n"); else printf("该元素在线性表中的位置为:%d \n",p); //插入元素 (在i处插入元素e) printf("请输入要插入的位置:\n"); scanf("%d",&k); printf("请输入要插入的元素值:\n"); scanf("%d",&j); InsList(la,k,j); //调用插入函数 Output(la); //删除元素 删除第i个元素 printf("请输入需要删除的元素的位置:\n"); scanf("%d",&m); DelList(la,m,&num); printf("删除成功,删除的元素为%d",num); printf("\n"); Output(la); } 5.测试数据及结果 实验总结: 经过调试与测试,实验结果与测试预期一致。顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 1.实验要求 i. 实验目的: 通过编程,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。 理解算法的主要思想及流程。
数据结构实验实训报告范文

一、实验目的1. 理解并掌握数据结构的基本概念和常用算法。
2. 学会使用C语言实现线性表、栈、队列、树和图等基本数据结构。
3. 培养动手实践能力,提高编程水平。
二、实验内容1. 线性表(1)顺序表(2)链表2. 栈(1)顺序栈(2)链栈3. 队列(1)顺序队列(2)链队列4. 树(1)二叉树(2)二叉搜索树5. 图(1)邻接矩阵表示法(2)邻接表表示法三、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 编译器:Visual Studio 20194. 实验软件:C语言开发环境四、实验步骤1. 线性表(1)顺序表1)定义顺序表结构体2)实现顺序表的初始化、插入、删除、查找等基本操作3)编写测试程序,验证顺序表的基本操作(2)链表1)定义链表结构体2)实现链表的创建、插入、删除、查找等基本操作3)编写测试程序,验证链表的基本操作2. 栈(1)顺序栈1)定义顺序栈结构体2)实现顺序栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证顺序栈的基本操作(2)链栈1)定义链栈结构体2)实现链栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证链栈的基本操作3. 队列(1)顺序队列1)定义顺序队列结构体2)实现顺序队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证顺序队列的基本操作(2)链队列1)定义链队列结构体2)实现链队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证链队列的基本操作4. 树(1)二叉树1)定义二叉树结构体2)实现二叉树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉树的基本操作(2)二叉搜索树1)定义二叉搜索树结构体2)实现二叉搜索树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉搜索树的基本操作5. 图(1)邻接矩阵表示法1)定义邻接矩阵结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接矩阵表示法的基本操作(2)邻接表表示法1)定义邻接表结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接表表示法的基本操作五、实验结果与分析1. 线性表(1)顺序表实验结果表明,顺序表的基本操作实现正确,测试程序运行稳定。
《数据结构》实验报告

《数据结构》实验报告实验一一、实验目的及要求理解线性表的顺序存储结构;熟练掌握顺序表结构及其有关算法的设计;理解线性表的链式存储结构;熟练掌握动态链表结构及其有关算法的设计;根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法;深入了解栈和队列的特性,以便在实际问题背景下灵活运用他们;同时巩固对这两种结构的构造方法的理解。
二、实验环境硬件:计算机软件:Microsoft Visual C++三、实验内容1.以顺序表作存储结构,实现线性表的插入、删除;2.以单链表作存储结构,实现有序表的合并;3.利用栈(以顺序栈作存储结构)实现进制转换,并用队列(以链队列作存储结构)计算并打印杨辉三角。
四、源程序清单五、实验结果六、总结实验二一、实验目的及要求掌握二叉树的动态存储结构--二叉链表,掌握二叉树的三种遍历方法,会运用三种遍历的方法求解有关问题。
二、实验环境硬件:计算机软件:Microsoft Visual C++三、实验内容1.以二叉链表作存储结构,建立一棵二叉树;2.输出其先序、中序、后序遍历序列;3.求出它的深度;4.统计其叶子结点数四、源程序清单五、实验结果六、总结实验三一、实验目的及要求掌握图的存储结构及其建立算法,熟练掌握图的两种遍历算法及其应用。
二、实验环境硬件:计算机软件:Microsoft Visual C++三、实验内容1.以邻接矩阵法作存储结构,建立一个无向图;2.输出该图的深度优先搜索序列;3.输出该图的广度优先搜索序列;4. 设计算法求出该图的连通分量个数及边的数目。
四、源程序清单五、实验结果六、总结实验四一、实验目的及要求掌握顺序表的查找方法,尤其是折半查找方法。
掌握二叉排序树的查找算法。
二、实验环境硬件:计算机软件:Microsoft Visual C++三、实验内容1.建立一个顺序表,用顺序查找的方法对其实施查找;2.建立一个有序表,用折半查找的方法对其实施查找;3.建立一个二叉排序树,根据给定值对其实施查找;4.对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能分析。
数据结构实验报告2篇

数据结构实验报告数据结构实验报告精选2篇(一)实验目的:1. 熟悉数据结构的基本概念和基本操作;2. 掌握线性表、栈、队列、链表等经典数据结构的实现方法;3. 掌握数据结构在实际问题中的应用。
实验内容:本次实验主要包括以下几个部分:1. 线性表的实现方法,包括顺序表和链表,分别使用数组和链表来实现线性表的基本操作;2. 栈的实现方法,包括顺序栈和链式栈,分别使用数组和链表来实现栈的基本操作;3. 队列的实现方法,包括顺序队列和链式队列,分别使用数组和链表来实现队列的基本操作;4. 链表的实现方法,包括单链表、双链表和循环链表,分别使用指针链、双向链和循环链来实现链表的基本操作;5. 综合应用,使用各种数据结构来解决实际问题,例如使用栈来实现括号匹配、使用队列来实现马铃薯游戏等。
实验步骤及结果:1. 线性表的实现方法:a) 顺序表的基本操作:创建表、插入元素、删除元素、查找元素等;b) 链表的基本操作:插入节点、删除节点、查找节点等;c) 比较顺序表和链表的优缺点,分析适用场景。
结果:通过实验,确认了顺序表适用于频繁查找元素的情况,而链表适用于频繁插入和删除节点的情况。
2. 栈的实现方法:a) 顺序栈的基本操作:进栈、出栈、判空、判满等;b) 链式栈的基本操作:进栈、出栈、判空、判满等。
结果:通过实验,掌握了栈的基本操作,并了解了栈的特性和应用场景,例如括号匹配。
3. 队列的实现方法:a) 顺序队列的基本操作:入队、出队、判空、判满等;b) 链式队列的基本操作:入队、出队、判空、判满等。
结果:通过实验,掌握了队列的基本操作,并了解了队列的特性和应用场景,例如马铃薯游戏。
4. 链表的实现方法:a) 单链表的基本操作:插入节点、删除节点、查找节点等;b) 双链表的基本操作:插入节点、删除节点、查找节点等;c) 循环链表的基本操作:插入节点、删除节点、查找节点等。
结果:通过实验,掌握了链表的基本操作,并了解了链表的特性和应用场景。
数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中重要的基础课程,通过本次实验,旨在深入理解和掌握常见数据结构的基本概念、操作方法以及在实际问题中的应用。
具体目的包括:1、熟练掌握线性表(如顺序表、链表)的基本操作,如插入、删除、查找等。
2、理解栈和队列的特性,并能够实现其基本操作。
3、掌握树(二叉树、二叉搜索树)的遍历算法和基本操作。
4、学会使用图的数据结构,并实现图的遍历和相关算法。
二、实验环境本次实验使用的编程环境为具体编程环境名称,编程语言为具体编程语言名称。
三、实验内容及步骤(一)线性表的实现与操作1、顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。
实现顺序表的初始化、插入、删除和查找操作。
2、链表的实现定义链表的节点结构,包含数据域和指针域。
实现链表的创建、插入、删除和查找操作。
(二)栈和队列的实现1、栈的实现使用数组或链表实现栈的数据结构。
实现栈的入栈、出栈和栈顶元素获取操作。
2、队列的实现采用循环队列的方式实现队列的数据结构。
完成队列的入队、出队和队头队尾元素获取操作。
(三)树的实现与遍历1、二叉树的创建以递归或迭代的方式创建二叉树。
2、二叉树的遍历实现前序遍历、中序遍历和后序遍历算法。
3、二叉搜索树的操作实现二叉搜索树的插入、删除和查找操作。
(四)图的实现与遍历1、图的表示使用邻接矩阵或邻接表来表示图的数据结构。
2、图的遍历实现深度优先遍历和广度优先遍历算法。
四、实验结果与分析(一)线性表1、顺序表插入操作在表尾进行时效率较高,在表头或中间位置插入时需要移动大量元素,时间复杂度较高。
删除操作同理,在表尾删除效率高,在表头或中间删除需要移动元素。
2、链表插入和删除操作只需修改指针,时间复杂度较低,但查找操作需要遍历链表,效率相对较低。
(二)栈和队列1、栈栈的特点是先进后出,适用于函数调用、表达式求值等场景。
入栈和出栈操作的时间复杂度均为 O(1)。
2、队列队列的特点是先进先出,常用于排队、任务调度等场景。
数据结构实验报告

数据结构实验报告一、实验目的本实验旨在通过对数据结构的学习和实践,掌握基本的数据结构概念、原理及其应用,培养学生的问题分析与解决能力,提升编程实践能力。
二、实验背景数据结构是计算机科学中的重要基础,它研究数据的存储方式和组织形式,以及数据之间的关系和操作方法。
在软件开发过程中,合理选用和使用数据结构,能够提高算法效率,优化内存利用,提升软件系统的性能和稳定性。
三、实验内容本次实验主要涉及以下几个方面的内容:1.线性表的基本操作:包括线性表的创建、插入、删除、查找、修改等操作。
通过编程实现不同线性表的操作,掌握它们的原理和实现方法。
2.栈和队列的应用:栈和队列是常用的数据结构,通过实现栈和队列的基本操作,学会如何解决实际问题。
例如,利用栈实现括号匹配,利用队列实现银行排队等。
3.递归和回溯算法:递归和回溯是解决很多求解问题的常用方法。
通过编程实现递归和回溯算法,理解它们的思想和应用场景。
4.树和二叉树的遍历:学习树和二叉树的遍历方法,包括前序、中序和后序遍历。
通过编程实现这些遍历算法,加深对树结构的理解。
5.图的基本算法:学习图的基本存储结构和算法,包括图的遍历、最短路径、最小生成树等。
通过编程实现这些算法,掌握图的基本操作和应用。
四、实验过程1.具体实验内容安排:根据实验要求,准备好所需的编程环境和工具。
根据实验要求逐步完成实验任务,注意记录并整理实验过程中遇到的问题和解决方法。
2.实验数据采集和处理:对于每个实验任务,根据要求采集并整理测试数据,进行相应的数据处理和分析。
记录实验过程中的数据和结果。
3.实验结果展示和分析:将实验结果进行适当的展示,例如表格、图形等形式,分析实验结果的特点和规律。
4.实验总结与反思:总结实验过程和结果,回顾实验中的收获和不足,提出改进意见和建议。
五、实验结果与分析根据实验步骤和要求完成实验任务后,得到了相应的实验结果。
对于每个实验任务,根据实验结果进行适当的分析。
数据结构实验一顺序表实验报告

数据结构实验一顺序表实验报告一、实验目的本次实验的主要目的是通过实现顺序表的基本操作,深入理解线性表的逻辑结构和存储结构,掌握顺序表的插入、删除、查找等操作的实现方法,提高编程能力和问题解决能力。
二、实验环境本次实验使用的编程语言为 C 语言,编程环境为 Visual Studio 2019。
三、实验原理顺序表是一种线性表的存储结构,它使用一组连续的存储单元依次存储线性表中的元素。
在顺序表中,元素的逻辑顺序与物理顺序是一致的。
顺序表的基本操作包括初始化、插入、删除、查找、遍历等。
在实现这些操作时,需要考虑顺序表的存储空间是否已满、插入和删除元素时元素的移动等问题。
四、实验内容(一)顺序表的定义```cdefine MAXSIZE 100 //定义顺序表的最大长度typedef struct {int dataMAXSIZE; //存储顺序表的元素int length; //顺序表的当前长度} SeqList;```(二)顺序表的初始化```cvoid InitList(SeqList L) {L>length = 0;}```(三)顺序表的插入操作```cint InsertList(SeqList L, int i, int e) {if (L>length == MAXSIZE) {//顺序表已满return 0;}if (i < 1 || i > L>length + 1) {//插入位置不合法return 0;}for (int j = L>length; j >= i; j) {//移动元素L>dataj = L>dataj 1;}L>datai 1 = e; //插入元素L>length++;return 1;}```(四)顺序表的删除操作```cint DeleteList(SeqList L, int i, int e) {if (L>length == 0) {//顺序表为空return 0;}if (i < 1 || i > L>length) {//删除位置不合法}e = L>datai 1; //取出被删除的元素for (int j = i; j < L>length; j++){//移动元素L>dataj 1 = L>dataj;}L>length;return 1;}```(五)顺序表的查找操作```cint SearchList(SeqList L, int e) {for (int i = 0; i < Llength; i++){if (Ldatai == e) {return i + 1;}}}```(六)顺序表的遍历操作```cvoid TraverseList(SeqList L) {for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);}printf("\n");}```五、实验步骤1、打开 Visual Studio 2019,创建一个新的 C 语言项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告全集 实验一 线性表基本操作和简单程序 1. 实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2. 实验要求 (1) 认真阅读和掌握和本实验相关的教材内容。 (2) 认真阅读和掌握本章相关内容的程序。 (3) 上机运行程序。 (4) 保存和打印出程序的运行结果,并结合程序进行分析。 (5) 按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果
实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表 nodetype *create()//建立单链表,由用户输入各结点data域之值, //以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"< while(1) { cout <<" 输入第"<< i <<"结点data域值:"; cin >> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点 } i++; } return h; } 3)输出单链表中的元素 void disp(nodetype*h)//输出由h指向的单链表的所有data域之值 { nodetype *p=h; cout<<"输出一个单链表:"< if(p==NULL)cout<<"空表"; while(p!=NULL) { coutnext; } cout<} 4)计算单链表的长度 int len(nodetype *h)//返回单链表的长度 { int i=0; nodetype *p=h; while(p!=NULL) { p=p->next;i++; } return i; } 5)寻找第i个节点 nodetype *find(nodetype *h,int i)//返回第i个节点的指针 { nodetype *p=h; int j=1; if(i>len(h)||i<=0) return NULL;//i上溢或下溢c else { while (p!=NULL&&j<1)//查找第i个节点,并由p指向该节点 { j++;p=p->next; } return p; } } 6)单链表的插入操作 nodetype *ins(nodetype *h,int i,elemtype x)//在单链表head中第i个节点 //(i>=0)之后插入一个data域为x的节点 { nodetype *p,*s; s=(nodetype*)malloc(sizeof(nodetype));//创建节点s s->data=x;s->next=NULL; if(i==0)//i=0:s作为该单链表的第一个节点 { s->next=h;h=s; } else {p=find(h,i);//查找第i个节点,并由p指向该节点 if(p!=NULL) { s->next=p->next; p->next=s; } return h; } } 7)单链表的删除操作 nodetype *del(nodetype *h,int i)//删除第i个节点 { nodetype *p=h, *s; int j=1; if(i==1)//删除第1个节点 { h=h->next;free(p); } else { p=find(h,i-1);//查找第i-1个节点,并由p指向该节点 if(p!=NULL&&p->next!=NULL) { s=p->next;//s指向要删除的节点 p->next=s->next; free(s); } else cout<<"输入i的值不正确"< } return h; } 8)释放节点空间 void dispose(nodetype *h)//释放单链表的所有节点占用的空间 { nodetype *pa=h,*pb; if(pa!=NULL) { pb=pa->next; if(pb==NULL)//只有一个节点的情况 free(pa); else { while (pb!=NULL)//有两个及以上节点的情况 { free(pa);pa=pb;pb=pb->next; } free(pa); } } } 9)主程序模块: #include"slink.h"//包含头文件slink void main() { nodetype *head;//定义节点指针变量 head=create();//创建一个单链表 disp(head);//输出单链表 cout<<"单链表长度:"< ins(head, 2,0);//在第二个节点之后插入以0为元素的节点 disp(head);//输出新链表 del(head,2);//删除第二个节点 disp(head);//输出新链表
} 5.实验结果
建立一个单链表: 输入第1结点data域值:1 输入第2结点data域值:2 输入第3结点data域值:3 输入第4结点data域值:4 输入第5结点data域值:5 输入第6结点data域值:6 输入第7结点data域值:7 输入第8结点data域值:8 输入第9结点data域值:9 输入第10结点data域值0: 输出一个单链表: 1 2 3 4 5 6 7 8 9 单链表长度:9 输出一个单链表: 1 0 2 3 4 5 6 7 8 9 输出一个单链表: 1 2 3 4 5 6 7 8 实验二 顺序栈的实现
1.实验目的 掌握顺序栈的基本操作:初始化栈、判栈空否、入栈、出栈、取栈顶数据元素等运算以及程序实现方法。 2.实验要求 (1) 认真阅读和掌握和本实验相关的教材内容。 (2) 分析问题的要求,编写和调试完成程序。 (3) 保存和打印出程序的运行结果,并分析程序的运行结果。 3.实验内容 利用栈的基本操作实现一个判断算术表达式中包含圆括号、方括号是否正确配对的程序。具体完成如下: (1) 定义栈的顺序存取结构。 (2) 分别定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈等)。 (3) 定义一个函数用来判断算术表达式中包含圆括号、方括号是否正确配对。其中,括号配对共有四种情况:左右括号配对次序不正确;右括号多于左括号;左括号多于右括号;左右括号匹配正确。 (4) 设计一个测试主函数进行测试。 (5) 对程序的运行结果进行分析。 实验代码: #include #define MaxSize 100
typedef struct { int data[MaxSize]; int top; }SqStack; void InitStack(SqStack *st) //初始化栈 { st->top=-1; } int StackEmpty(SqStack *st) //判断栈为空 { return (st->top==-1); } void Push(SqStack *st,int x) //元素进栈 { if(st->top==MaxSize-1) printf("栈上溢出!\n"); else { st->top++; st->data[st->top]=x; } } void Pop(SqStack *st) //退栈 { if(st->top==-1) printf("栈下溢出\n"); else st->top--; } int Gettop(SqStack *st) //获得栈顶元素 { if(st->top==-1) { printf("栈空\n"); return 0; } else return st->data[st->top]; }