数据结构实验指导书实验3
- 格式:doc
- 大小:110.50 KB
- 文档页数:10
实验3:串及其应用一、实验目的掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。
二、问题描述全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。
用户可完成对文本的插入、删除、修改等功能。
三、实验要求1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移至文件首、尾;光标移至本行首、尾。
2、实现基本编辑命令:I----在当前光标前插入内容,按ESC结束F----在当前光标后插入内容,按ESC结束D----删除光标所在行ND---删除光标位置开始的n行N-----删除光标上的字符W----将修改后的文本保存下来Q----退出编辑状态。
四、实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境或Visual C++ 程序集成环境五、实验步骤1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。
2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。
3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区;4、操作确定后,将修改后的文本存到文件中。
六、测试数据自行设定。
七、实验报告要求实验报告应包括以下几个部分:1、问题描述;2、算法的设计描述;3、测试结果的分析与讨论。
4、设计与实现过程中的体会,进一步的改进设想。
5、实验总结。
八、思考题1、对命令格式非法等错误做严格检查和适当处理。
2、扩充编辑操作,如对某行进行串替换?。
《数据结构》实验指导书实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。
(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
(这里用于比较的字段为分数)练习及思考题:(1)顺序表的操作上有什么特点?(2)不固定数据元素的个数,而通过特殊数据来标记输入数据的结束,实现这样的输入操作。
实验二、链表实验目的:熟悉链式表的逻辑特性、存储表示方法的特点和链式表的基本操作。
实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。
(2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。
(3) 键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。
(用于比较的关键字字段为分数)。
(4) 输入关键字值x,删除表中所有关键字值<=x的结点。
(用于比较的关键字字段为分数)。
练习及思考题:(1)不同类型的数据元素所对应的链式表在类型定义和操作实现上有什么异同?(2)有头结点的链式表,有什么特点?实验三、栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。
实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。
实验内容:(1) 判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。
数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。
具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。
2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。
3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。
二、实验环境1、操作系统:Windows 或 Linux 操作系统。
2、编程语言:C、C++、Java 等编程语言中的一种。
3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。
三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。
2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。
3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。
四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。
分析顺序表在不同操作下的时间复杂度。
2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。
比较单链表和双向链表在操作上的优缺点。
(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。
利用栈解决表达式求值、括号匹配等问题。
2、队列的实现与应用实现顺序队列和链式队列。
利用队列解决排队问题、广度优先搜索等问题。
(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。
实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。
2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。
分析二叉搜索树的性能。
(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。
数据结构实验三实验报告数据结构实验三实验报告一、实验目的本次实验的目的是通过实践掌握树的基本操作和应用。
具体来说,我们需要实现一个树的数据结构,并对其进行插入、删除、查找等操作,同时还需要实现树的遍历算法,包括先序、中序和后序遍历。
二、实验原理树是一种非线性的数据结构,由结点和边组成。
树的每个结点都可以有多个子结点,但是每个结点只有一个父结点,除了根结点外。
树的基本操作包括插入、删除和查找。
在本次实验中,我们采用二叉树作为实现树的数据结构。
二叉树是一种特殊的树,每个结点最多只有两个子结点。
根据二叉树的特点,我们可以使用递归的方式实现树的插入、删除和查找操作。
三、实验过程1. 实现树的数据结构首先,我们需要定义树的结点类,包括结点值、左子结点和右子结点。
然后,我们可以定义树的类,包括根结点和相应的操作方法,如插入、删除和查找。
2. 实现插入操作插入操作是将一个新的结点添加到树中的过程。
我们可以通过递归的方式实现插入操作。
具体来说,如果要插入的值小于当前结点的值,则将其插入到左子树中;如果要插入的值大于当前结点的值,则将其插入到右子树中。
如果当前结点为空,则将新的结点作为当前结点。
3. 实现删除操作删除操作是将指定的结点从树中移除的过程。
我们同样可以通过递归的方式实现删除操作。
具体来说,如果要删除的值小于当前结点的值,则在左子树中继续查找;如果要删除的值大于当前结点的值,则在右子树中继续查找。
如果要删除的值等于当前结点的值,则有三种情况:- 当前结点没有子结点:直接将当前结点置为空。
- 当前结点只有一个子结点:将当前结点的子结点替代当前结点。
- 当前结点有两个子结点:找到当前结点右子树中的最小值,将其替代当前结点,并在右子树中删除该最小值。
4. 实现查找操作查找操作是在树中寻找指定值的过程。
同样可以通过递归的方式实现查找操作。
具体来说,如果要查找的值小于当前结点的值,则在左子树中继续查找;如果要查找的值大于当前结点的值,则在右子树中继续查找。
《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。
同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。
2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。
4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。
在程序调试通过后, 打印输出程序清单和运行结果。
5.上机结束后, 总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
分析程序的优缺点、时空性能以及改进思想, 写出心得体会。
实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。
要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。
《数据结构》实验指导《数据结构》C语言版实验指导目录《数据结构》上机实验的目的和要求 (1)实验一顺序结构线性表的实现 (3)实验二单链表的插入和删除 (16)实验三栈的实现 (24)实验四二叉树操作实现 (30)实验五哈夫曼树的建立与编码实现 (39)实验六图的遍历操作 (50)实验七排序 (67)实验八查找 (83)《数据结构》课程设计 (95)《数据结构》上机实验的目的和要求通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程序的能力。
要求所编的程序能正确运行,并提交实验报告。
实验报告的基本要求为:1、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
2、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。
4、调试分析:(1)调试过程中所遇到的问题及解决方法;(2)算法的时空分析;(3)经验与体会。
5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。
6、测试结果:列出对于给定的输入所产生的输出结果。
若有可能,测试随输入规模的增长所用算法的实际运行时间的变化。
实验一顺序结构线性表的实现一、目的:掌握顺序表的表示方法,存储结构及其基本操作的实现。
二、要求:建立一顺序表,实现其基本操作。
三、示例程序:说明:一个完整的程序是由输入,处理,输出三部分组成的,每个部分还可以分为若干小部分,如输入,又可以分为声明,初始化变量,接收数据,预处理数据等。
书上列出的算法是解决问题的基本思路,也可以是解决问题的处理过程,并未给出详细的输入与输出,这一部分需要在练习过程中加入,在解决实际问题时,还需要做灵活的处理。
C语言本身有自身的特点,其基本思想是与机器的指令码相关的。
数据结构实验指导书实验一线性表[实验目的]1.了解顺序表的结构特点及有关概念,掌握顺序表建立、插入、删除的基本操作算法。
2.了解单链表的结构特点及有关概念,掌握单链表建立、插入、删除的基本操作算法。
[实验内容]1.顺序表的实践。
1)建立4个元素的顺序表list[]={2,3,4,5},实现顺序表建立的基本操作。
2)在list[]={2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在list[]={2,3,4,9,5}中删除指定位置(i=3)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践。
1)建立一个包括头结点和3个结点的(4,2,1)的单链表,实现单链表建立的基本操作。
2)在已建好的单链表中的指定位置(x=2)插入一个结点3,实现单链表插入的基本操作。
3)在一个包括头结点和4个结点的(4,2,3,1)的单链表的指定位置删除一个结点,实现单链表删除的基本操作。
[实验要点及说明]线性表(linear list)是n(n≥0)个数据元素a1,a2,…a n组成的有限序列。
其中n 称为数据元素的个数或线性表的长度,当n=0时称为空表,n>0时称为非空表。
通常将非空的线性表记为(a1,a2,…,a n),其中的数据元素a i(1≤i≤n)是一个抽象的符号,a i是第i个数据元素,称i为数据元素a i在线性表中的位置。
其具体含义在不同情况下是不同的,即它的数据类型可以根据具体情况而定,本书中,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。
顺序表也称为线性表的顺序存储结构。
其存储方式为:在内存中用一组地址连续的存储单元依次存储线性表的数据元素,但该连续存储空间的大小要大于或等于顺序表的长度。
一般让线性表中第一个元素存放在连续存储空间第一个位置,第二个元素紧跟着第一个之后,其余依此类推。
可定义顺序表如下:#define maxnumelemtype list[maxnum];int num=-1;线性表的链式存贮结构,也称为链表。
数学与计算机科学学院计算机科学与技术专业
《数据结构》课程实验
指导手册
目录
实验1:顺序表的定义及其相关操作算法的实现 (1)
实验2:链表的定义及其相关操作算法的实现 (2)
实验3:栈和队列的定义及其基本操作算法的实现 (4)
实验4:串模式匹配算法的设计与实现 (5)
实验5:二叉树的创建、遍历及其它基本操作的实现 (6)
实验6:哈夫曼树及哈夫曼编码的算法实现 (7)
实验7:查找算法的实现(1) (8)
实验8:查找算法的实现(2) (9)
实验9:几个主要排序算法的实现与比较 (10)
实验1:顺序表的定义及其相关操作算法的实现
实验2:链表的定义及其相关操作算法的实现
实验3:栈和队列的定义及其基本操作算法的实现
实验4:串模式匹配算法的设计与实现
实验5:二叉树的创建、遍历及其它基本操作的实现
实验6:哈夫曼树及哈夫曼编码的算法实现
实验7:查找算法的实现(1)
实验8:查找算法的实现(2)
实验9:几个主要排序算法的实现与比较。
《数据结构》实验指导书成都信息工程大学计算机学院目录实验一顺序表实验 (1)实验二单链表实验 (2)实验三栈的实验 (3)实验四二叉树实验 (4)实验五图的实验 (5)实验六查找与排序实验 (6)实验一顺序表实验一、实验环境PC 1台,Turbo C/C++或Borland C/C++或Visual C++软件。
二、实验目的1. 掌握线性表顺序存储结构的实现2. 掌握顺序表基本运算的实现3. 理解顺序表的随机存取特性三、实验内容1. 编程实现顺序表的创建InitList_Sq、打印PrintList_Sq、定位LocateElem_Sq、插入ListInsert_Sq、删除ListDelete_Sq等基本运算。
2. 用顺序表来表示集合A和B,求:A = A B。
四、实验步骤1. 建立"SqList.h"文件,用于存放以下2-5内容2. 定义线性表的顺序存储类型(顺序表)3. 实现顺序表的基本运算4. 其他辅助函数5. 求A = A ∪ B6. 编写主函数测试各功能(放入"SqList_Test.cpp"文件)实验二单链表实验一、实验环境PC 1台,Turbo C/C++或Borland C/C++或Visual C++软件。
二、实验目的1. 掌握线性表链式存储结构的特点2. 掌握单链表存储结构及基本运算的实现3. 掌握顺序表和链表的适用场合三、实验内容1. 编程实现(带头结点的)单链表的创建InitList_Link、打印PrintList_Link、插入ListInsert_Link、删除ListDelete_Link、定位LocateElem_Link等基本运算。
2. 编写算法将两个带头结点的有序单链表La、Lb合并成一个带头结点的有序单链表Lc。
四、实验步骤1. 建立"LinkList.h"文件,用于存放以下2-5内容2. 定义带头结点的单链表类型3. 实现单链表的基本运算4. 其他辅助函数5. 实现保序归并(Lc = La + Lb)6. 编写主函数测试各功能(放入"LinkList_Test.cpp"文件)实验三栈的实验一、实验环境PC 1台,Turbo C/C++或Borland C/C++或Visual C++软件。
引言概述正文内容
1.实验环境配置
1.1硬件要求
计算机硬件配置要求
操作系统要求
附加硬件设备要求(如虚拟机等)
1.2软件要求
编程语言要求(如C/C++、Java等)开发环境配置(如IDE、编译器等)1.3实验库和工具
实验需要使用的库文件和工具
如何获取和配置实验库和工具
2.实验内容介绍
2.1实验目标和背景
数据结构实验的作用和意义
实验背景和相关应用领域介绍
2.2实验概述
实验内容的大致流程和步骤
实验中可能遇到的问题和挑战
2.3实验要求
对学生实验流程和实验结果的要求
实验过程中需要注意的事项和技巧
3.实验步骤
3.1实验准备
配置实验环境
获取实验所需数据和文件
3.2实验具体步骤
根据实验要求将数据结构知识应用到具体问题中根据实验要求实现相应的算法和数据结构
3.3实验示例代码
提供示例代码以供学生参考和学习
解析示例代码中的关键步骤和实现细节
4.实验答案
4.1实验题目
实验题目及相关说明
确定实验的具体要求和目标
4.2实验答案解析
对实验答案的具体实现进行解析
对实验中可能遇到的问题和错误进行分析和解决4.3实验答案示例
提供实验答案的示例代码
解析实验答案中的关键实现步骤和说明
5.实验总结
5.1实验成果评估
对学生实验成果进行评估
分析实验结果的优点和不足
5.2实验心得
学生对本次实验的收获和感想
学生对未来实验的建议和展望
总结。
实验三栈操作一、实验目的1.熟悉栈的的顺序存储结构和链式存储结构定义;2.掌握栈的基本操作,如:压栈、弹栈、判栈空、判栈满等运算。
3.掌握栈的特点(先进后出FILO),并能在实际问题背景下灵活应用。
二、实验内容示例程序1:圆括号匹配的检验(LinkStack.h+LS_ParenMatch.cpp)本示例程序在头文件LinkStack.h中定义了栈的链式存储结构,并实现了链栈的基本操作(判栈空、构造、压栈、弹栈、销毁栈等)。
在文件LS_ParenMatch.cpp 中实现了栈基本操作的一个实际应用:圆括号()匹配的检验。
要求学生利用头文件LinkStack.h中已经定义的栈的基本操作实现栈的其他应用,或在头文件中添加其他关于栈的基本操作。
1.LinkStack.h中代码如下://链栈基本操作的实现#include <stdio.h>#include <stdlib.h>#define NULL 0//定义栈中元素的类型,可根据实际数据类型进行定义//typedef char StackElementType;//栈中元素的类型//#define PF "%c" //元素输出格式//定义栈的链式存储结构typedef struct node{StackElementType data;struct node *next;}LinkStack;//链栈基本操作的说明int IsEmpty(LinkStack *top);//判栈空LinkStack *Push(LinkStack *top,StackElementType x);// 压栈LinkStack *Pop(LinkStack *top,StackElementType &elem);//弹栈StackElementType GetTop(LinkStack *top);//取栈顶元素void ShowStack(LinkStack *top);//输出栈中数据(顶-->底)void DestroyStack(LinkStack *top);//销毁栈//链栈基本操作的实现int IsEmpty(LinkStack *top){//判栈空return top? 0:1;}LinkStack *Push(LinkStack *top,StackElementType x){// 压栈LinkStack *p;p=(LinkStack *)malloc(sizeof(LinkStack));if(p){p->data=x;p->next=top;top=p;}else{printf("内存空间不足,程序运行终止!\n");exit(0);}return top;}LinkStack *Pop(LinkStack *top,StackElementType &elem){//弹栈LinkStack *temp;if(IsEmpty(top)){printf("空栈,出栈操作失败!\n");return NULL;}else{temp=top;elem=top->data;top=top->next;free(temp);return top;}}StackElementType GetTop(LinkStack *top){//取栈顶元素if(IsEmpty(top)){printf("空栈,取栈顶元素失败!\n");return 0;}elsereturn top->data;}void ShowStack(LinkStack *top){//输出栈中数据(顶-->底)LinkStack *p;p=top;printf(" Stack:");while(p){printf(PF,p->data);p=p->next;}printf("\n");}void DestroyStack(LinkStack *top){//销毁栈LinkStack *p;if(top){p=top;top=top->next;free(p);}printf("栈已经销毁!\n");}2.LS_ParenMatch.cpp中代码如下://栈的一个应用实例:圆括号()匹配的检验//假设表达式中充许括号嵌套,//则检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。
//例:(()()(()))//先出现的左括号后匹配,后出现的左括号先匹配。
//符合栈的操作特性:先进后出(后进先出)。
//故可通过栈的基本操作实现括号是否匹配的检验。
//链栈基本操作的实现//定义栈中元素的类型,可根据实际数据类型进行定义typedef char StackElementType;//元素类型#define PF "%c" //元素输出格式#include "linkstack.h"//链栈头文件,实现了链栈的基本操作//(判栈空、构造、压栈、弹栈、销毁栈、输出栈数据)bool PMatch(){//检查表达式中圆括号()配对是否正确LinkStack *s=NULL;char c,e;printf("请输入表达式(以';'结束):\n");c=getchar();while(c!=';'){printf("读入字符为:%c",c);ShowStack(s);if(c=='(')s=Push(s,c);if(c==')'){if(s) s=Pop(s,e);else {printf("missing '('\n");return false;}}c=getchar();}if(!IsEmpty(s)){printf("missing ')'\n");return false;}else { printf("Match Success!\n");return true;}}void main(){PMatch();//调用括号匹配检查函数getchar();}示例程序2:数制转换(SqStack.h+SS_Conver.cpp)本示例程序在头文件SqStack.h中定义了栈的顺序存储结构,并实现了顺序栈的基本操作(构造、压栈、弹栈、清空栈、销毁栈、输出栈中数据等)。
在文件SS_Conver.cpp中实现了栈基本操作的一个实际应用:数制转换(将任意十进制数转换为二、八、十六进制数)。
要求学生利用头文件SqStack.h中已经定义的栈的基本操作实现栈的其他应用,或在头文件中添加其他关于栈的基本操作。
1.SqStack.h中代码如下:#include<stdio.h>#include<malloc.h>#include<stdlib.h>//定义栈中元素的类型,可根据实际数据类型进行定义//typedef int ElemType;//栈中元素的类型//#define PF "%d" //元素输出格式//定义栈的顺序存储结构#define StackInitSize 100 //存储空间初始分配量typedef struct {ElemType data[StackInitSize]; /*栈存储空间用一个预设的长度的一维数组来实现 */ int top; // 栈顶指针}SeqStack;//顺序栈基本操作的说明SeqStack *InitStack();//构造空栈void Push(SeqStack *s,ElemType x);//压栈ElemType Pop(SeqStack *s);//弹栈void ClearStack(SeqStack *s);//清空栈void DestroyStack(SeqStack *s);//销毁栈void ShowStack(SeqStack *s,int mark);//输出栈中数据//顺序栈基本操作的实现SeqStack *InitStack(){//构造空栈SeqStack *s;s=(SeqStack *)malloc(sizeof(SeqStack)); if(s){s->top=-1;return s;}else{printf("内存不够!程序结束!");exit(0);}}void Push(SeqStack *s,ElemType x){//压栈if(s->top==StackInitSize-1){printf("栈满!上溢!无法进栈!\n");exit(0);}else{s->top++;s->data[s->top]=x;}return;}ElemType Pop(SeqStack *s){//弹栈ElemType temp;if(s->top==-1){printf("栈空!下溢!程序结束!\n");exit(0);}else{temp=s->data[s->top];s->top--;return temp;}}void ClearStack(SeqStack *s){//清空栈s->top=-1;}void DestroyStack(SeqStack *s){//销毁栈free(s);printf("栈已销毁!\n");}void ShowStack(SeqStack *s,int mark){//输出栈中数据if(mark==0)//(底->顶){for(int i=0;i<=s->top;i++)printf(PF,s->data[i]);printf("\n");}else//(顶->底){for(int i=s->top;i>=0;i--)printf(PF,s->data[i]);printf("\n");}}2.SS_Conver.cpp中代码如下:#include<stdio.h>#include<malloc.h>#include<stdlib.h>//定义栈中元素的类型,可根据实际数据类型进行定义typedef int ElemType;//栈中元素的类型#define PF "%d " //元素输出格式#include "sqstack.h"//顺序栈头文件,实现了顺序栈的基本操作//(构造、压栈、弹栈、清空栈、销毁栈、输出栈中数据)void conversion( ){//对于输入的任意一个非负的十进制整数,//打印输出与其等值的r进制数SeqStack *s;int n,r;s=InitStack();printf("请输入一个非负十进制数n:");scanf("%d",&n);L1:printf("\n请输入需转换的进位计数制r(2,8,16):");scanf("%d",&r);if(r==2||r==8||r==16){while(n){Push(s,n%r);n=n/r;}}else goto L1;printf("栈中数据(底->顶):");ShowStack(s,0);//栈中数据(底->顶)printf("栈中数据(顶->底):");ShowStack(s,1);//栈中数据(顶->底)printf("转换得到的%d进制数为:",r);while(s->top!=-1){int e=Pop(s);if(e>=10&&e<=15)//十六进制10..15对应字符A..F printf("%c", 65+e-10);else printf("%d",e);}}void main(){L2:conversion( );//调用数制转换函数printf("\n重复一次(y|n)?");getchar();//读入换行符if(getchar()=='y') goto L2;}三、实验要求1.认真阅读和掌握本实验所有示例程序。