软件技术基础栈,队列,二叉树的应用教程.docx

软件技术基础栈,队列,二叉树的应用教程.docx

软件技术基础栈,队列,二叉树的应用教程

软件技术基础相关实验 实验名称: 栈的应用 一、实验目的: 掌握顺序栈和链式栈的定义和运算,了解它们的应用。 二、实验要求: 1、掌握顺序栈的定义、特点及常见算法。 2、掌握链式栈的定义、特点及常见算法。 3、参照给定的栈的程序样例,验证给出的栈的常见算法。 4、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、顺序栈的操作和测试。要求: 设计一个主函数实现对顺序栈进行操作测试。测试方法为:依次把数据元素1,3,5,7,9入栈,并显示入栈结果;接着依次出栈其中的数据元素并在屏幕上显示。 2、链式栈的操作。 设计一个主函数实现对链式栈进行操作测试。测试方法为:依次把数据元素3,6,9,12,15入栈,并显示入栈结果;接着依次出栈其中的数据元素并在屏幕上显示。 3、栈的应用。利用顺序栈求解表达式(a+b)*(c-d)的值。 四、程序要求: 1、顺序栈的长度自行确定。 2、重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果: 入栈一个元素: 删除一个元素: 取栈顶元素: 退出 六、实验中遇到的问题及解决方法: 栈的操作有了前面的基础,相对而言能够编写出来,遇到的问题还是地址操作相关的,通过不断的练习对于指针对于地址传递应该说有了比较好的理解。 附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。) #include stdio.h #includestdlib.h #includestring.h #define MAXNUM 20 #define ElemType int /*定义顺序栈的存储结构*/ typedef struct { ElemType stack[MAXNUM]; int top; }SqStack; /*初始化顺序栈*/ void InitStack(SqStack *p) { if(!p) printf(内存分配失败!); p-top=-1; } /*入栈*/ void Push(SqStack *p,ElemType x) { if(p-topMAXNUM-1) { p-top=p-top+1; p-stack[p-top]=x; } else printf(Overflow! \n); } /*出栈*/ ElemType Pop(SqStack *p) { ElemType x; if(p-top=0) { x=p-stack[p-top]; printf(以前的栈顶数据元素%d已经被删除! \n,p-stack[p-top]); p-top=p-top-1; return x; } else { printf(Underflow! \n); return(0); } } /*获取栈顶元素*/ ElemType GetTop(SqStack *p) { ElemType x; if(p-top=0) { x=p-stack[p-top];printf(\n栈顶元素为:%d\n,x); return x; } else { printf(Underflow! \n); return 0; } } /*遍历顺序栈*/ void OutStack(SqStack *p) { int i; printf(\n); if(p-top0) printf(这是一个空栈!); printf(\n); for(i=p-top;i=0;i--) printf(第%d个数据元素是:%6d\n,i,p-stack[i]); } /*主函数*/ void main() { SqStack *q; int cord;ElemType a; printf(第一次使用必须初始化! \n); do{ printf(\n-----------主菜单----------- ); printf(\n 1 初始化顺序栈 ); printf(\n 2 插入一个元素 ); printf(\n 3 删除栈顶元素 ); printf(\n 4 取栈顶元素 ); printf(\n 5

文档评论(0)

1亿VIP精品文档

相关文档