《数据结构》课程实验指导书(100504)数据结构实验指导书_第1页
《数据结构》课程实验指导书(100504)数据结构实验指导书_第2页
《数据结构》课程实验指导书(100504)数据结构实验指导书_第3页
《数据结构》课程实验指导书(100504)数据结构实验指导书_第4页
《数据结构》课程实验指导书(100504)数据结构实验指导书_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据结构课程实验指导书数据结构实验教学大纲课程代码:0806523006 开课学期:3开课专业:总学时/实验学时:64/16总学分/实验学分:3.5/0.5一、课程简介数据结构是计算机各专业的重要技术基础课。在计算机科学中,数据结构不仅是一般程序设计的基础,而且是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础。数据结构课程主要讨论各种主要数据结构的特点、计算机内的表示方法、处理数据的算法以及对算法性能的分析。通过对本课程的系统学习使学生掌握各种数据结构的特点、存储表示、运算的原理和方法,学会从问题入手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适

2、当的逻辑结构、存储机构及其相应的操作算法,并初步掌握时间和空间分析技术。另一方面,本课程的学习过程也是进行复杂程序设计的训练过程,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。二、实验的地位、作用和目的数据结构是一门实践性较强的基础课程,本课程实验主要是着眼于原理和应用的结合,通过实验,一方面能使学生学会把书上学到的知识用于解决实际问题,加强培养学生如何根据计算机所处理对象的特点来组织数据存储和编写性能好的操作算法的能力,为以后相关课程的学习和大型软件的开发打下扎实的基础。另一方面使书上的知识变活,起到深化理解和灵活掌握教学内容的目的。三、实验方式与基本要求

3、实验方式是上机编写完成实验项目指定功能的程序,并调试、运行,最终得出正确结果。具体实验要求如下:1. 问题分析充分地分析和理解问题本身,弄清要求,包括功能要求、性能要求、设计要求和约束,以及基本数据特性、数据间联系等等。2. 数据结构设计针对要解决的问题,考虑各种可能的数据结构,并且力求从中选出最佳方案(必须连同算法实现一起考虑),确定主要的数据结构和全程变量。对引入的每种数据结构和全程变量要详细说明其功用、初值和操作的特点。3. 算法设计算法设计分概要和详细设计。概要设计着重解决程序的模块设计问题,这包括考虑如何把被开发的问题程序自顶向下分解成若干程序模块,并决定模块的接口,即模块间的相互关

4、系以及模块之间的信息交换问题。详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出。4. 测试用例设计准备典型测试数据和测试方案。测试数据要有代表性、敏感性。测试方案包括模块测试和模块集成测试。5. 上机调试对程序进行编译,纠正程序中可能出现的语法错误。调试前,先运行一遍程序看看究竟将会发生什么。如果情况很糟,则根据事先设计的测试方案并结合现场情况进行错误跟踪,包括打印执行路径或输出中间变量值等手段。6. 程序性能分析在运行结果正确的前提下再分析程序中主要算法是否具有较好的时间复杂度和空间复杂度。如果没有,则通过改变数据结构或操作方法使编写的程序性能达到最佳。7. 实验总结每个实验完成

5、后要认真书写实验报告,对程序运行的结构,要认真分析,总结每次实验项目的体会与收获。四、报告与考核每个实验都要求学生根据上机内容写出实验报告,报告要求包括以下七个方面的内容:1实验目的;2实验内容;3实验要求;4算法设计;5详细程序清单;6程序运行结果;7实验心得体会。考核方式:每个实验项目根据以下两个方面进行考核:1指导教师随堂抽查学生的实验过程(包括实验预习、实验出勤、实验结果的测试),并根据抽查结果评定学生成绩,此成绩占此实验总成绩的70%;2学生编写课程设计实验报告,每位学生按照实验报告的内容和要求编写详细的实验报告并打印上交给指导老师,由指导老师根据每位学生的完成情况评定成绩,此成绩占

6、实验总成绩的30%。五、设备及器材材料配置硬件:奔腾以上pc机软件:turbo c、c+或java六、实验指导书及主要参考书1朱蓉.数据结构实验指导书2张铭.数据结构与算法. 高教出版社.2008.63张铭.数据结构与算法学习指导与习题解析. 高教出版社.20094耿国华等 数据结构-c语言描述. 高教出版社.2005.75刘怀亮. 数据结构(c语言描述) .冶金出版社.2005.26刘怀亮. 数据结构(c语言描述)习题与实验指导导.冶金出版社.2005.27蔡子经,施伯乐.数据结构教程.上海:复旦大学出版社.19948严蔚敏,吴伟民.数据结构(c语言版).北京:清华大学出版社.1999;9严

7、蔚敏,吴伟民.数据结构题集(c语言版).北京:清华大学出版社.1999;10徐孝凯.数据结构课程实验.北京:清华大学出版社.2002; 11孟佳娜,胡潇琨.算法与数据结构实验与习题.北京:机械工业出版社.2004.七、实验项目与内容提要序号实验名称目的要求、内容提要(限20字)每组人数实验学时实验类型必做选做所在实验分室1顺序表的基本操作熟悉并完成顺序表上基本操作的算法及其应用问题的编程实现。1个班2设计必做2链表的基本操作熟悉并完成单链表和双向链表基本操作算法的编程实现。1个班2设计必做3栈的基本操作熟悉并完成顺序栈和链栈基本操作算法及其应用问题的编程实现1个班2设计必做4队列的基本操作熟悉

8、并完成循环顺序队列和循环链队列基本操作算法及其应用问题的编程实现。1个班2设计必做5二叉树的操作熟悉并完成二叉树遍历算法及其应用问题的编程实现。1个班2设计必做6静态查找表的查找操作熟悉并完成静态查找表上的顺序查找、二分查找和索引查找算法的编程实现1个班2设计必做7二叉排序树的查找操作熟悉并完成在二叉排序树上进行查找、插入和删除操作的编程实现。1个班2设计选做8哈希表上的查找操作熟悉并完成哈希表的建立、查找和插入操作的编程实现1个班2设计选做9排序操作熟悉并完成几种主要排序操作的编程实现。1个班2设计必做10图的遍历熟悉并完成图的遍历、最小生成树及其应用问题的编程实现1个班2设计选做78实验b

9、01: 顺序表的操作实验一、实验名称和性质所属课程数据结构实验名称顺序表的操作实验学时2实验性质验证 综合 设计必做/选做必做 选做二、实验目的1掌握线性表的顺序存储结构的表示和实现方法。2掌握顺序表基本操作的算法实现。3了解顺序表的应用。三、实验内容1建立顺序表。2在顺序表上实现插入、删除和查找操作(验证性内容)。3删除有序顺序表中的重复元素(设计性内容)。4完成一个简单学生成绩管理系统的设计(应用性设计内容)。四、实验的软硬件环境要求硬件环境要求:pc机(单机)使用的软件名称、版本号以及模块:windows环境下的turboc2.0以上或vc+等 。五、知识准备前期要求熟练掌握了c语言的编

10、程规则、方法和顺序表的基本操作算法。六、验证性实验1实验要求编程实现如下功能:(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。(2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。(3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。(4)在顺序表中查找第i个元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。2. 实验相关原理:线性表的顺序存储结构称为顺序表,顺序表的存储结构描述为:#define maxlen 30 /*线性表的最大长度*/type

11、def struct elemtype elemmaxlen; /*顺序表中存放元素的数组,其中elemtype为抽象数据类型,在程序具体实现时可以用任意类型代替*/ int length; /*顺序表的长度,即元素个数*/ sqlist; /*顺序表的类型*/【核心算法提示】1顺序表插入操作的基本步骤:要在顺序表中的第i个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法,假设线性表的表长为n,则i的合法值范围:1in+1,若是合法位置,就再判断顺序表是否满,如果满,则增加空间或结束操作,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将

12、待插入的数据元素x插入到该位置上,最后将线性表的表长增加1。2顺序表删除操作的基本步骤:要删除顺序表中的第i个数据元素,首先仍然要判断i的合法性,i 的合法范围是1in,若是合法位置,则将第i个数据元素之后的所有数据元素都前移一个位置,最后将线性表的表长减1。3顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素,则可以采用顺序查找的方法,从顺序表中第1个数据元素开始依次将数据元素值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回0值。【核心算法描述】status sqlist_insert(sqlist &l,int i,elemtype x) /*在顺序表l中第

13、i个元素前插入新元素x*/ if (il.length+1) return error; /*插入位置不正确则出错*/ if (l.length=maxlen) return overflow; /*顺序表l中已放满元素,再做插入操作则溢出*/ for(j=l.length-1;j=i-1;j-) l.elemj+1=l.elemj;/*将第i个元素及后续元素位置向后移一位*/ l.elemi-1=x; /*在第i个元素位置处插入新元素x*/ l.length+; /*顺序表l的长度加1*/ return ok; status sqlist_delete(sqlist &l,int i,ele

14、mtype &e) /*在顺序表l中删除第i个元素*/ if (il.length) return error; /*删除位置不正确则出错*/for(j=i;j=l.length-1;j+) l.elemj-1=l.elemj; /*将第i+1个元素及后继元素位置向前移一位*/ l.length-; /*顺序表l的长度减1*/ return ok; int sqlist_search(sqlist l,elemtype x) /* 在顺序表中查找值为x的元素,如果找到,则函数返回该元素在顺序表中的位置,否则返回0*/ for (i=0;il.length&l.elemi!=x;i+);/*从第

15、一个元素开始依次将每个元素值与给定值x比较*/ if (il.length) return i; else return o;3源程序代码参考 #define maxlen 50typedef structint elemmaxlen;int length;sqlist;sqlist sqlist_insert(sqlist l,int i,int x) /*顺序表插入函数*/int j; if(il.length+1) printf(error!); else if(l.length=maxlen) printf(olerflow!); else for(j=l.length-1;j=i-1

16、;j-) l.elemj+1=l.elemj; l.elemi-1=x; l.length+; return l;sqlist sqlist_delete(sqlist l,int i) /*顺序表删除函数*/int j; if(il.length) printf(error!); else for(j=i;j=l.length-1;j+) l.elemj-1=l.elemj;l.length-; return l;int sqlist_search(sqlist l,int x)/* 顺序表查找函数*/ int i; for (i=0;il.length&l.elemi!=x;i+); if

17、 (il.length) return i+1; else return 0;void sqlist_display(sqlist l) /*顺序表元素输出函数*/ int j; for(j=0;j=l.length-1;j+) printf(%4d ,l.elemj); printf(n); main() /*主函数 */ sqlist l; int i,x,j; printf(nplease input the length:);/*请求输入顺序表中元素个数*/ scanf(%d,&l.length); printf(please input the value:n);/*请求输入顺序表中

18、各个元素*/ for(j=0;j=l.length-1;j+)scanf(%d,&l.elemj); printf(please input the insert position:); /*请求输入插入操作位置*/ scanf(%d,&i); printf(please input the insert node:);/*请求输入需要插入的新元素*/ scanf(%d,&x); l=sqlist_insert(l,i,x);/*调用顺序表插入函数*/ sqlist_display(l);/*调用顺序表元素输出函数*/ printf(please input the delete positi

19、on:);/*请求输入删除操作位置*/ scanf(%d,&i); l=sqlist_delete(l,i);/*调用顺序表删除函数*/ sqlist_display(l);/*调用顺序表元素输出函数*/ printf(please input the search node:); scanf(%d,&x); if (sqlist_search(l,x) /*如果查找成功,则显示查找成功和找到的元素位置,否则显示查找不成功*/ printf( search is success and %d is %d positionn,x,sqlist_search(l,x); else printf(

20、search is unsuccessn); 4运行结果参考如图1-1所示: 图1-1: 验证性实验运行结果七、设计性实验(以下两个设计题目学生可根据自己的掌握程度或兴趣自行选择完成)1编程实现删除有序顺序表中的所有重复元素,即使有序顺序表中相同的元素只保留一个。 实验要求 根据输入的n个非递减的有序数据建立一个有序顺序表,并输出有序顺序表中各元素值。 删除有序顺序表中所有的重复元素,并显示删除后的有序顺序表中各元素值。 核心算法提示要在有序顺序表中删除重复的元素,首先就要抓住有序顺序表的特性:重复的元素总是在相邻的位置上,如:12,15,15,15,35,56,56,78。则删除重复元素后所

21、得的有序表为:12,15,35,56,78。下面给出大致的操作步骤:从第1 个元素开始,依次将它与后面相邻的元素进行比较,如果相等则将前面那个相等的元素从顺序表中删除;如果不相等,则继续往下比较,如此重复,直到最后一个元素为止。 核心算法描述 sqlist delsqlist(sqlist l)int i=0,j; while(il.length-1) if (l.elemi=l.elemi+1) /*如果第i个及第i+1个相邻元素值相等*/ for (j=i+1;jnext=null;/*头结点的指针域初始为空*/ scanf(%d,&node);while(node!=0) p=(link

22、list)malloc(sizeof(lnode);/*为一个新结点的分配空间*/ p-data=node; /*为新结点数据域赋值*/ p-next=l-next;/*新结点指针域指向开始结点*/ l-next=p; /*头结点指针域指向新结点,即新结点成为开始结点*/scanf(%d,&node); void creat2(linklist &l) /*输入一系列整数,以0标志结束,将这些整数作为data域并用尾插法建立一个带头结点的单链表的函数*/ l=(linklist)malloc(sizeof(lnode);/*为头结点分配空间*/ l-next=null; /*头结点的指针域初始

23、为空*/ r=l; /*尾指针初始指向头结点*/scanf(%d,&node);while(node!=0) p=(linklist)malloc(sizeof(lnode);/*为一个新结点分配空间*/ p-data=node; /*新结点数据域赋值*/ p-next=null; /*新结点指针域为空*/ r-next=p;/*尾结点指针域指向新结点*/ r=p; /*尾指针指向新结点,即新结点成为尾结点*/scanf(%d,&node); status list_search(linklist l, int i;elemtype &e) /*在带头结点的单链表l中查找第i个元素,如果查找成

24、功则用e返回其值*/ p=l-next; /*使指针p指向第1个元素结点*/j=1; /*计数器赋初值为1*/while (p& jnext; j+;if (!p& ji) return error; /*如果i值不合法,即i值小于1或大于表长,则出错*/e=p-data; /*如果第i个元素存在,则将该元素值赋给e*/return ok; status list_insert(linklist &l,int i;elemtype x) /*在带头结点的单链表l中第i个位置之前插入新元素x*/ p=l; j=0; while(p!=null&jnext; +j; if(p=null|ji-1)

25、 return error; /*若位置不正确,即i小于1或大于表的长度加1,则出错*/ s=(linklist)malloc(sizeof(lnode); /*分配一个新结点的空间*/ s-data=x; /*为新结点数据域赋值*/ /*下面两条语句就是完成修改链,将新结点s插入到p结点之后*/ s-next=p-next; /*新结点指针域指向p的后继结点*/ p-next=s; /*新结点成为p的后继结点*/ return ok;status list_delete(linklist &l,int i,elemtype &x)/*在带头结点的单链表l中,删除第i个元素结点,并用x返回其值

26、*/ p=l;j=0; while(p-next!=null&jnext; +j; if (p-next=null|ji-1) return error; /*若位置不正确,即i小于1或大于表长,则出错*/ q=p-next; /* q指向p的后继结点*/ p-next=q-next; /*q的后继结点成为p的后继结点*/ x=q-data; /*用x返回第i个位置的元素*/free(q); /*释放q所指的被删结点的空间*/return ok;3源程序代码参考#include #include typedef struct lnode int data; struct lnode *next

27、; lnode,*linklist;linklist creat(linklist l) /*单链表建立函数 */int node; linklist p; l=(linklist)malloc(sizeof(lnode); l-next=null; printf(nplease input the node(end with 0):n ); /*请求输入线性表中各个元素,以0结束*/ scanf(%d,&node); while(node!=0) p=(linklist)malloc(sizeof(lnode); if (!p) exit(); p-data=node; p-next=l-n

28、ext; l-next=p; scanf(%d,&node); return l;linklist insert(linklist l,int i,int x) /*单链表插入函数*/ int j;linklist p,s; p=l; j=0; while (p!=null&jnext; +j; if (p=null|ji-1) printf(n error position!n); else s=(linklist)malloc(sizeof(lnode); s-data=x; s-next=p-next; p-next=s; return l;linklist delete(linklis

29、t l,int i) /*单链表删除函数*/ int j,x; linklist p,q; p=l; j=0; while(p-next!=null&jnext; +j; if(p-next=null|ji-1) printf(n erroe position!n); else q=p-next; p-next=q-next; x=q-data; printf(the delete data is:%dn,x); free(q); return l;int search(linklist l, int i) /*单链上的查找函数*/ linklist p; int j; p=l-next; j

30、=1; while (p& jnext; j+; if (!p& ji) return 0; /*如果i值不合法,即i值小于1或大于表长,则函数返回0值*/ else return(p-data); /*否则函数返回第i个元素的值*/void display(linklist l) /*单链表元素输出函数*/ linklist p; p=l-next; while(p!=null) printf(%4d,p-data); p=p-next; printf(n);main()/*主函数*/ linklist l=null; int i,x; l=creat(l);/*调用单链表建立函数*/ pr

31、intf(the linklist is:n); display(l); /*调用单链表元素输出(遍历)函数*/ printf(please input the position you want to insert:);/*请求输入插入操作位置*/ scanf(%d,&i); printf(please input the node you want to insert:);/*请求输入需要插入的元素*/ scanf(%d,&x); l=insert(l,i,x);/*调用单链表插入函数*/ printf(the linklist after inserted is:n); display(

32、l);/*调用单链表元素输出(遍历)函数*/ printf(please input the node position you want to delete:); /*请求输入删除操作位置*/ scanf(%d,&i); l=delete(l,i); /*调用单链表删除函数*/ printf(the linklist after deleted is:n); display(l); /*调用单链表元素输出(遍历)函数*/ printf(please input the position you want to search:); /*请求输入待查找元素的位置*/ scanf(%d,&i);

33、x=search(l,i); /*调用单链表查找函数*/ if (x) /*如果查找成功,则显示第i个元素的值,否则显示第i个元素不存在*/ printf( the %dth elem is %dn,i,x); else printf( the %dth elem is not exsitn);4运行结果参考如图2-1所示: 图2-1: 验证性实验运行结果七、设计性实验(以下两个设计题目学生可根据自己的掌握程度或兴趣自行选择完成)1. 编程实现在双向循环链表上的插入和删除操作1 实验要求(1)输入链表的长度和各元素的值,用尾插法建立双向循环链表,并输出链表中各元素值,观察输入的内容与输出的内容

34、是否一致。(2)在双向循环链表的第i个元素之前插入一个值为x的元素,并输出插入后的链表中各元素值。(3)删除双向循环链表中第i个元素,并输出删除后的链表中各元素值。(4)在双向循环链表中查找值为x元素,如果查找成功,则显示该元素在链表中的位置,否则显示该元素不存在。 核心算法提示 双向循环链表采用的存储结构描述如下: typedef struct dulnode elemtype data; /*数据域*/ struct dulnode *prior; /*指向前驱结点的指针域*/ struct dulnode *next;/*指向后继结点的指针域*/ dulnode,*dulinklist;

35、 typedef int elemtype;不论是建立双向循环链表还是在双向循环链表中进行插入、删除和查找操作,其操作方法和步骤都跟单链表类似。只不过要注意两点:(1)凡是在操作中遇到有修改链的地方,都要进行前驱和后继两个指针的修改。(2)单链表操作算法中的判断条件:p= =null 或p!=null ,在循环链表的操作算法中则需改为:p!= l,其中l为链表的头指针。 核心算法描述void dulcreat (dulinklist &l,int n) /*输入n个整数(其中n为表长),将这些整数作为data域并用尾插法建立一个带头结点的双向循环链表的函数*/ l=( dulinklist)m

36、alloc(sizeof(dulnode);/*为头结点分配空间*/ l-next=l-prior=l;/*使头结点的后继指针和前驱指针都指向自身,形成空的双向循环链表*/ r=l; /*尾指针初始指向头结点*/for (i=0;idata); /*从键盘输入值,并保存在新结点数据域中*/ p-next=r-next; /*新结点后继指针指向尾结点r的后继结点*/ p-prior=r; /*新结点的前驱指针指向尾结点r*/ r-next=p; /*尾结点的后继指针指向新结点*/ r=p; /*尾指针指向新结点,即新结点成为尾结点*/l-prior=r; /*使尾结点成为头结点的前驱结点*/st

37、atus dulist_search(dulinklist l, int i;elemtype &e) /*在带头结点的双向循环链表l中查找第i个元素,如果查找成功则用e返回其值*/ p=l-next; /*使指针p指向第1个元素结点*/j=1; /*计数器赋初值为1*/ while (p!=l & jnext; j+;if (p=l& ji) return error; /*如果i值不合法,即i值小于1或大于表长,则出错*/e=p-data; /*如果第i个元素存在,则将该元素值赋给e*/return ok; status dulist_insert(dulinklist &l,int i;

38、elemtype x) /*在带头结点的双向循环链表l中第i个位置之前插入新元素x*/ p=l; j=0;while(p!=l &jnext; +j; if(p=l|ji-1) return error; /*若位置不正确,即i小于1或大于表的长度加1,则出错*/ s=(linklist)malloc(sizeof(dulnode); /*为一个新结点s分配空间*/ s-data=x; /*为新结点数据域赋值*/ /*下面四条语句就是完成修改链,将新结点s插入到p结点之后*/ s-next=p-next; /*新结点s的后继结点是p的后继结点*/ s-prior=p; /*新结点s的前驱结点是

39、p*/ s-next-prior=s; /*新结点s的后继结点的前驱结点是新结点s*/ p-next=s; /*新结点成为p的后继结点*/ return ok;status dulist_delete(dulinklist &l,int i,elemtype &x)/*在带头结点的双向循环链表l中,删除第i个元素结点,并用x返回其值*/ p=l;j=0; while(p-next!=l&jnext; +j; if (p-next=l|ji-1) return error; /*若位置不正确,即i小于1或大于表长,则出错*/ q=p-next; /* q指向p的后继结点,即q指向被删结点*/ p

40、-next=q-next; /* p的后继结点是q的后继结点*/ q-next-prior=p; /* q的后继结点的前驱结点是p*/ x=q-data; /*用x返回第i个位置的元素*/free(q); /*释放q所指的被删结点的空间*/return ok;请将上述算法与单链表上相应操作的算法对照学习,特别注意它们不相同的地方。2编写一个程序,计算出一个单链表中数据域值为一个指定值x的结点个数。实验要求: 从键盘输入若干个整数,以此序列为顺序建立一个不带头结点的单链表; 输出此单链表中的各个数据元素值; 给定一个x的具体整数值,计算并返回此单链表中数据域值为x的结点个数值。实验b03: 栈的

41、操作实验一、实验名称和性质所属课程数据结构实验名称栈的操作实验学时2实验性质验证 综合 设计必做/选做必做 选做二、实验目的1掌握栈的存储结构的表示和实现方法。2掌握栈的入栈和出栈等基本操作算法实现。3了解栈在解决实际问题中的简单应用。三、实验内容1建立顺序栈,并在顺序栈上实现入栈和出栈操作(验证性内容)。2建立链栈,并在链栈上实现入栈和出栈操作(设计性内容)。3实现汉诺(hanoi)塔求解问题(应用性设计内容)。四、实验的软硬件环境要求硬件环境要求:pc机(单机)使用的软件名称、版本号以及模块:windows环境下的turboc2.0以上或vc+等。 五、知识准备前期要求熟练掌握了c语言的编

42、程规则、方法和顺序栈、链栈的基本操作算法。六、验证性实验1实验要求编程实现如下功能:(1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值。(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。2. 实验相关原理:栈是一种插入和删除操作都限制在表的一端进行的特殊线性表,它的操作具有“先进后出”的特性。采用顺序存储结构的栈称为顺序栈。栈的存储结构描述如下:#define maxsize 100; /*顺序栈的最大长度*/typedef struct selemtype basemaxsize; /*存储栈中数据元素的数组*/ int top; /*top为栈顶指针,它指示栈顶元素的存储空间的下一个存储单元*/ sqstack;【核心算法提示】 1顺序栈入栈操作的基本步骤:首先判断顺序栈是否为满,如果满,则函数返回error,否则将待入栈的数据元素存放在top所指示的存储单元中,再使top后移一个存储单元位置,即将top值加1,最后函数返回ok。2 顺序栈出栈操作的基本步骤:首先判断顺序栈是否为空,如果空,则函数返回error,否则将栈顶指针前移一个存储单元位置,即将to

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论