栈和队列
1.学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词
1、栈
1、栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表
2、按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶
3、栈的基本操作包括初始化,进栈,出栈,判断是否栈空,判断是否栈满等等
2、队列
1、队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作
2、队列又称为先进先出线性表,只有最早进入队列的元素才能最先从队列中删除
3、队列的基本操作包括初始化,入队,出队,判断是否队空,判断是否队满等等
1.2 使用思维导图将这些关键词组织起来
2.PTA实验作业
2.1 题目1:7-1 jmu-字符串是否对称
2.2 设计思路
输入一个字符串并获得其长度
创建一个maxsize等于字符串长度的栈并将字符串中的元素依次入栈
while(a[i])
将栈中元素出栈并依次与字符串比较
如果不相等,输出no,然后令flag=0,结束循环
否则,继续比较
end while
如果flag不等于0,则该字符串对称,输出yes
2.3 代码截图
2.4 PTA提交列表说明
编译错误是一位devc上false和true是自带的,不需要重新声明,但在pta上要写出 typedef enum { false, true } bool;才能运行
2.1 题目2:7-1 jmu-报数游戏
2.2 设计思路
先输入人数n和条件数m
判断n和m大小,如果n小于m,输出error!
定义一个数组,数组从1到n的值为0,代表未退出游戏
定义flag=0,count=0
while(flag小于游戏总人数n时)
for j=1 to n
如果a[j]=0,count自增
如果count%m=0即说明对应的第j个人报到m,令a[j]=1并让j入队
end for
end while
出队并输出
2.3 代码截图
2.4 PTA提交列表说明
主要是输出的问题,没有搞好一些边缘值空格的关系
2.1 题目3:7-2 银行业务队列简单模拟
2.2 设计思路
先输入顾客总数n
for i=1 to n
输入顾客编号
如果顾客编号为奇数,入Q1队列,为偶数,入Q2队列
end for
判断Q1是否为空,不为空输出Q1第一个数,为空则输出Q2第一个数
while(Q1和Q2都不为空时)
如果flag=0或者1 输出空格+Q1的数
否则,输出空格+Q2的数
end while
最后判断Q1和Q2是否有剩,输出剩下的一方的所有数
2.3 代码截图
2.4 PTA提交列表说明
编译错误是因为用的c++语法,提交的时候忘了换成c++了
部分正确是因为没有判断Q1队列为空时只需输出Q2队列这个问题
3.截图本周题目集的PTA最后排名
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:80+80=160
4. 阅读代码
1、代码贴图
2、功能:解决背包问题,即从n件物品中选出若干件物品装入背包,使得被选物品的总质量“恰好”等于背包所能装载的最大质量
3、优点:通过栈先进后出的原则不断试验,直到找到正解,其时间复杂度仅为O(n)
4、代码相关地址:https://blog.csdn.net/zaoan_wx/article/details/50925327