本组项目针对​​《数据结构基础系列(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)也可以设计一个返回值为布尔型的函数,参数为要配对的表达式,为一个字符串。


[​​参考解答​​]

(​2016级及以后同学不做下面的项目​)

【项目4 - 数制转换】

把十进制的整数转换为二至九之间的任一进制数输出。请利用栈设计算法,并实现程序。

提示:要转换为r进制,则原来的数逐次除以基数r(除完之后用商再除),直到商为0,得到的一系列余数的逆序就是转换结果。这里的“逆序”,意味着后产生的余数,会先输出,后进先出,栈的机会来了……

[​​参考解答​​]

【项目5 - 后缀表达式】

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

[​​参考解答​​]