DS博客作业02--栈和队列
| 这个作业属于哪个班级 |
| ---- | ---- | ---- |
| 这个作业的地址 |
| 这个作业的目标 | 学习栈和队列的结构设计及运算操作 |
|姓名|喻文康|
0.PTA得分截图
1.本周学习总结
1.1 栈
顺序栈:即用顺序表实现栈存储结构。
头文件 stack.h 栈的头文件
初始化栈: InitStack(SqStack &s) 参数:顺序栈s 功能:初始化
入栈函数: Push(SqStack &s,SElemType e) 参数:顺序栈s,元素e 功能:将e入栈
出栈函数: Pop(SqStack &s,SElemType &e) 参数:顺序栈s,元素e 功能:出栈,e接收出栈元素值
获得栈顶元素函数: GetTop(SqStack s,SElemType &e) 参数:顺序栈s,元素e 功能:得到栈顶元素
判断栈为空: bool stack::isEmpty()//判断是否为空栈
判断栈满: bool isFull(); //判断是否栈满
链栈:栈的链式存储结构,简称链栈
由于栈只是栈顶在做插入和删除操作,所以栈顶应该放在单链表的头部。
另外,都有了栈顶在头部了,单链表中的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。
对于链栈来说,基本不存在栈满的情况,除非内存已经没有使用空间了。
对于空栈来说,链表原来的定义是头指针指向空,那么链栈的空其实就是top=NULL。
链栈的初始化:InitStack(LinkStack &S) 参数:链栈S 功能:初始化
入栈函数:Push(LinkStack &S,SElemType e) 参数:链栈S,元素e 功能:将e入栈
出栈函数: Pop(LinkStack &S,SElemType &e) 参数:链栈S,元素e 功能:栈顶出栈,e接收出栈元素值
获得栈顶元素函数: GetTop(LinkStack &S,SElemType &e) 参数:链栈S,元素e 功能:得到栈顶元素
1.2 栈的应用
1.括号匹配检验public class Match
2.迷宫求解
3.表达式求值 & 中缀表达式转后缀表达式
1.3 队列
顺序队列:
队列的初始化函数:void InitQueue(SqQueue *Q)
队列的入队:Status EnQueue(SqQueue *Q,QElemtype e)
队列的出队:Status DeQueue(SqQueue *Q,QElemtype *e)
取队头元素:Status GetHead(SqQueue *Q,QElemtype *e)
队列长度:Status QueueLength(SqQueue Q)
队列为空判断:Status QueueEmpty(SqQueue *Q)
在include头文件中,相应函数如下:
队列的入队: q.push(x)
队列的出队: q.pop()
取队头元素: q.front()
取队尾元素: q.back()
队列长度: q.size()
队列为空判断: q.empty()
清空队列: q.clear()
顺序队列存在假溢出的缺陷,所以常常用环形队列
环形队列:
操作函数
定义结构体:
初始化队列:
求一个环形队列的长度:
环形队列的入队操作:
环形队列的出队操作:
链队列的结构、操作函数
初始化:
入队列:
出队列:
获取队头元素的值:
判断是否为空:
队列应用:银行业务队列简单模拟
代码实现:
2.PTA实验作业
2.1 符号配对(未完成)
2.1.1 解题思路及伪代码
2.1.2 总结解题所用的知识点
2.2 银行业务队列简单模拟
2.2.1 解题思路及伪代码
解题思路:
伪代码:
2.2.2 总结解题所用的知识点
用到了1. 队列的出队操作和入队操作 2. 队列的基本操作函数,如判空、取队头元素、出队入队等等 3. 对循环条件的控制
3.阅读代码(未完成)
3.1 题目及解题代码
3.2 该题的设计思路及伪代码
3.3 分析该题目解题优势及难点。