栈和队列

Posted 网络1711王艺斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和队列相关的知识,希望对你有一定的参考价值。

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

5. 代码Git提交记录截图

以上是关于栈和队列的主要内容,如果未能解决你的问题,请参考以下文章

栈和队列基本操作

栈和队列

博客作业03--栈和队列

博客作业03--栈和队列

栈和队列知识点总结

栈和队列的面试题Java实现