数据结构实践项目——栈

来源:互联网 发布:西游破坏神进阶数据 编辑:程序博客网 时间:2024/05/18 02:59

本组项目针对《数据结构基础系列(3):栈和队列》中的1-6课:
1 “栈和队列”导学
2 栈的定义
3 栈的顺序存储结构及其基本运算实现
4 栈的链式存储结构及其基本运算的实现
5 栈的应用1-表达式求值
6 栈的应用2-迷宫问题

【项目1 - 建立顺序栈算法库】
  定义顺序栈存储结构,实现其基本运算,并完成测试。
  要求:
  1、头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括:

void InitStack(SqStack *&s);    //初始化栈void DestroyStack(SqStack *&s);  //销毁栈bool StackEmpty(SqStack *s);     //栈是否为空int StackLength(SqStack *s);  //返回栈中元素个数——栈长度bool Push(SqStack *&s,ElemType e); //入栈bool Pop(SqStack *&s,ElemType &e); //出栈bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素void DispStack(SqStack *s);  //输出栈

2、在sqstack.cpp中实现这些函数
3、在main函数中完成测试,包括如下内容:
(1)初始化栈s
(2)判断s栈是否为空
(3)依次进栈元素a,b,c,d,e
(4)判断s栈是否为空
(5)输出栈长度
(6)输出从栈顶到栈底元素
(7)出栈,并输出出栈序列
(8)判断s栈是否为空
(9)释放栈
[参考解答]

【项目2 - 建立链栈算法库】
  定义链栈存储结构,实现其基本运算,并完成测试。
  具体要求参照项目1。
[参考解答]

【项目3 - 括号的匹配】
  假设表达式中允许三种括号:圆括号、方括号和大括号。编写一个算法,判断表达式中的各种左括号是否与右括号匹配。
例如,输入2+(3+4)*[2+{[3]}]-8,输出匹配正确;输入2+(3+4*[2)+{[3]}-8,输出匹配错误。

提示:(1)遇到左括号入栈,遇到右括号后,出栈一个符号,看是否配对。若配对,继续,直到读完所有的符号,栈也正好为空。若在中间出现一个不配对的,或者_____________,则可以得出不配对的结论。(2)也可以设计一个返回值为布尔型的函数,参数为要配对的表达式,为一个字符串。

[参考解答]

【项目4 - 数制转换】
把十进制的整数转换为二至九之间的任一进制数输出。请利用栈设计算法,并实现程序。
提示:要转换为r进制,则原来的数逐次除以基数r(除完之后用商再除),直到商为0,得到的一系列余数的逆序就是转换结果。这里的“逆序”,意味着后产生的余数,会先输出,后进先出,栈的机会来了……
[参考解答]

【项目5 - 后缀表达式】
利用sqstack.h中栈的基本运算,实现将一个中缀表达式转换为对应的后缀表达式的算法。例如,输入(56-20)/(4+2),输出后缀表达式::56#20#-4#2#+/要求在数字后加#
[参考解答]

6 0
原创粉丝点击