第三章学习心得
第三章数据结构总结
第3章栈和队列
1.栈 (stack) 是限定仅在表尾进行插入或删除操作的线性表。 因此, 对栈来说, 表尾端有其特殊含义, 称为栈顶 (top), 相应地, 表头端称为栈底 (bottom)。 不含元素的空表称为空栈。(栈又称为后进先出 (Last In First Out, LIFO) 的线性表)
2.队列(queue)是一种先进先出(First In First Out, FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端称为队尾(rear), 允许 删除的一端则称为队头(front)。
3、栈的基本操作除了入栈和出栈外, 还有栈的初始化、 栈空的判定,以及取栈顶元素等(有两种存储表示,顺序表示和链式表示。)
4、队列也有两种存储表示,顺序表示和链式表示。基本操作有初始化、求队列长度、入队、出队、取队头元素
5. Hanoi塔问题的的递归算法
【算法步骤】
(1).如果n=l, 则直接将编号为l的圆盘从A移到C, 递归结束。
(2)否则:
• 递归, 将A上编号为1至n-l的圆盘移到B, C做辅助塔;
• 直接将编号为n的圆盘从A移到C;
• 递归, 将B上编号为1至n-1的圆盘移到C, A做辅助塔。
算法效率分析:时间复杂度为 0(2n) 、空间复杂度为 O(n)
6、作业、实践、小组合作
思路:检验算法借助一个栈, 每当读入一个左括号, 则直接入栈,等待相匹配的同类右括号;每当
读入一个右括号,若与当前栈顶的左括号类型相同, 则二者匹配,将栈顶的左括号出栈,直到表
达式扫描完毕。在处理过程中,还要考虑括号不匹配出错的情况。
(2)实践思路:
思路:用两个队列存顾客编号,然后用循环最时间,A窗口一分钟一个,B窗口两分钟一个
补充:c++库函数 queue
#include <iostream>
#include <queue>
queue<Type> M // 定义一个queue的变量,且定义时已经初始化
while(!q.empty()) q.pop(); //重复使用时,用这个初始化
q.push(1); //进队列
q.pop(); //出队列
int v=q.front(); //得到队首的值
int s=q.size(); //得到队列里元素个数
(2)小组合作
/* 编号是有 字母 + 数字组成
客户编号 + 客户姓名
客户编号 + 积分
输入 姓名 查 积分 ( 姓名 -> 编号 ->积分 )
不存在 输出 "not exist";
*/
在写通过名字查找积分的程序的时候是很不清楚该怎么写
看完一些同学的代码之后: