第三章学习心得

第三章数据结构总结

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";

*/

在写通过名字查找积分的程序的时候是很不清楚该怎么写

看完一些同学的代码之后:

 

 

 

posted @ 2020-04-26 19:40  不正经随记  阅读(270)  评论(0编辑  收藏  举报