一.学习总结

1 关键词:

  • 逻辑结构,存储结构,抽象数据类型,顺序存储类型,链式存储类型,线性表应用
  • 栈和队列

2 使用思维导图将这些关键词组织起来。

二.PTA实验作业

2.1题目1:符号配对

请编写程序检查C语言源程序中下列符号是否配对://、(与)、[与]、{与}。

1.设计思路

  1. 定义i,flag记录变量和判断变量
  2. 定义字符型e,str[MAXSIZE]
  3. 初始化栈s
  4. while(1)
  5. {
  6. 读取一整行字符串
  7. 定义len为字符串长度
  8. if(开头为.且长度为1
  9. 跳出循环end
  10. for(遍历字符串)
  11. {
  12. if(为左大中小括号)
  13. 进栈
  14. else if(为左注释符号)
  15. 用<代替进栈
  16. else if(右括号) {[(/*四种情况类似
  17. {
  18. if(栈不空)
  19. {
  20. 取栈顶元素
  21. if(栈顶为左括号)
  22. 出栈
  23. else
  24. {
  25. 右括号缺失输出
  26. flag=1标记
  27. break跳出循环
  28. }
  29. }
  30. else栈已经空
  31. {
  32. 左括号缺失输出
  33. flag=1标记
  34. break跳出循环
  35. }
  36. }
  37. }
  38. }
  39. if(!flag且栈空)
  40. 输出YES
  41. else if(!flag)
  42. 取栈顶元素
  43. 右括号缺失输出

2.代码截图











3.PTA提交列表说明

调试问题

  • 答案错误:出栈函数e前没加&号,导致没将元素返回到主函数内,找了很久才发现原来错在这里

  • 部分正确:开头多余左符号,比起上一个错误好改很多



多输出了一个NO

2.2题目2:银行业务队列简单模拟

设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。

1.设计思路

  1. 初始化A,B窗口
  2. fori=0 to n
  3. 输入num
  4. 奇偶数分别进入A,B
  5. end
  6. whileA,B都不为空)
  7. {
  8. ifA不为空)
  9. 控制输出格式
  10. ifA不为空)
  11. 继续输出格式
  12. ifB不为空)
  13. 控制输出格式
  14. }
  15. end

2.代码截图



3.PTA提交列表说明

调试问题

  • 部分正确:忘记加上A两倍输出

2.3题目3:jmu-报数游戏

1.设计思路

  1. 定义循环变量i,队列q
  2. fori=1 to n
  3. 元素入队列
  4. 更改长度
  5. end
  6. ifm>=n
  7. 输出错误
  8. else
  9. 定义观察变量flag=1
  10. while(队列不为空)
  11. fori=0 to m-1
  12. m-1个元素先出队再入队
  13. 出队第m个元素
  14. 控制输出格式
  15. end

2.代码截图

3.PTA提交列表说明

  • 编译错误:没有改c++

3.截图本周题目集的PTA最后排名

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分:2.5分(205分)

四. 阅读代码

利用两个队列实现一个栈

  1. public class StackByTwoQueue
  2. {
  3. /*
  4. * 两个队列实现一个栈
  5. * pop完成出栈操作,push完成入栈操作
  6. */
  7. public void push(String obj) {
  8. if(queue1.isEmpty()){
  9. queue2.add(obj);
  10. }
  11. if(queue2.isEmpty()){
  12. queue1.add(obj);
  13. }
  14. }
  15. public String pop() {
  16. //两个栈都为空时,没有元素可以弹出
  17. if (queue1.isEmpty()&&queue2.isEmpty()) {
  18. try {
  19. throw new Exception("stack is empty");
  20. } catch (Exception e) {
  21. }
  22. }
  23. if(queue1.isEmpty()){
  24. while(queue2.size()>1){
  25. queue1.add(queue2.poll());
  26. }
  27. return queue2.poll();
  28. }
  29. if(queue2.isEmpty()){
  30. while(queue1.size()>1){
  31. queue2.add(queue1.poll());
  32. }
  33. return queue1.poll();
  34. }
  35. return null;
  36. }
  37. public static void main(String[] args) {
  38. StackByTwoQueue stack = new StackByTwoQueue();
  39. for(int i=0;i<10;i++){
  40. stack.push(i+"");
  41. }
  42. for(int i=0;i<20;i++){
  43. System.out.println(stack.pop());
  44. }
  45. }
  46. }

此代码实现的时用两个队列来实现栈,网上关于这个题目的代码基本上都是c++,代码虽然不能完全理解,但思路还是可以明白的。将queue1 作为入队存储数据的功能,queue2 作为中转件,出队时先把 queue1 中数据取出然后加入到 queue2 中,出队之后再返回到 queue2 中。

五.代码Git提交记录截图

DS03--栈和队列的更多相关文章

  1. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  2. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  3. 剑指Offer面试题:6.用两个栈实现队列

    一.题目:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 原文是使用 ...

  4. C实现栈和队列

    这两天再学习了数据结构的栈和队列,思想很简单,可能是学习PHP那会没有直接使用栈和队列,写的太少,所以用具体代码实现的时候出现了各种错误,感觉还是C语言功底不行.栈和队列不论在面试中还是笔试中都很重要 ...

  5. JavaScript数组模拟栈和队列

    *栈和队列:js中没有真正的栈和队列的类型              一切都是用数组对象模拟的 栈:只能从一端进出的数组,另一端封闭       FILO   何时使用:今后只要仅希望数组只能从一端进 ...

  6. 用JS描述的数据结构及算法表示——栈和队列(基础版)

    前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...

  7. JavaScript中的算法之美——栈、队列、表

    序 最近花了比较多的时间来学习前端的知识,在这个期间也看到了很多的优秀的文章,其中Aaron可能在这个算法方面算是我的启蒙,在此衷心感谢Aaron的付出和奉献,同时自己也会坚定的走前人这种无私奉献的分 ...

  8. Java数据结构和算法之栈与队列

    二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为 ...

  9. python数据结构之栈、队列的实现

    这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...

  10. 栈和队列的面试题Java实现【重要】

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

随机推荐

  1. $.ajaxSetup

    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> ...

  2. python 中 property 属性的讲解及应用

    Python中property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回 property属性的有两种方式: 1. 装饰器 即:在方法上应用装饰器 2. 类属性 即 ...

  3. Linux驱动入门——构建和运行模块

    Hello world模块 本文介绍如何向内核中添加一个hello模块.该模块的功能是在模块加载时,向系统日志输出"hello world\n" 在模块卸载时输出"Goo ...

  4. css 中相对定位和绝对定位

    1. css中定位机制有三种: 标准文档流, 浮动, 绝对定位 2. 绝对定位就属于第三种定位, 用到position属性, 下面就是具体设置 相对定位: 相对于自身原有位置(就是普通流的时候)进行偏 ...

  5. Linux内核源代码目录结构详解

    http://blog.csdn.net/u013014440/article/details/44024207

  6. 微信小程序自定义tabbar的问题

    个人感觉小程序的tab样式自定义的能力有所欠缺,不够美观,于是今天自己diy了一个tab 测试的时候发现,无论是使用navigator跳转(会出现点击的效果)还是用bindtap(触摸),因为没有定义 ...

  7. CUDA Samples: Streams' usage

    以下CUDA sample是分别用C++和CUDA实现的流的使用code,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第十章,各个文件内容如 ...

  8. MPAndroidChart Wiki(译文)~Part 5

    19. ChartData子类 这篇wiki主要关注ChartData子类的具体介绍.至于此部分没有提及到的ChartData的子类,代表他们没有特性功能需要介绍. BarData 方法 使用 set ...

  9. EM算法定义及推导

    EM算法是一种迭代算法,传说中的上帝算法,俗人可望不可及.用以含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计 EM算法定义 输入:观测变量数据X,隐变量数据Z,联合分布\(P(X,Z|\t ...

  10. Filter学习(三)Filter(过滤器)常见应用

    一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题: package com.web.filter; import java.io.IOE ...