第三章学习总结

第三章 栈和队列

本章我们学习了线性结构的另外两种表现形式:栈和队列。

栈:只限定仅在表尾进行插入或删除的线性表。表尾段称作栈顶,表头端称作栈底,它的修改原则是后进先出,用于按照保存数据时的相反顺序来使用数据。类似于我们生活中放书拿书,最后叠上去的最早被抽出来。

队列:是一种先进先出的线性表,它只允许在表的一段进行插入,而在另一端删除元素。允许插入的一段称为队尾,允许删除的一段称为队头。它类似于我们生活中排队买东西,先来的先买,先输入的数据先输出。

接下来谈谈我在做作业时所遇到的问题。

括号匹配问题

一开始没能将栈的知识与题目进行联系,简单来说就是一脑懵逼。后来经过老师上课和书本上的提示,了解了大致的算法。于是创建栈、初始化栈、运用while循环和switch函数,遇到左括号压入栈(Push),遇到右括号就进行匹配。然后我结合书本没有定义获取栈顶元素的函数GetTop,而是直接输出栈顶元素(用Pop函数,返回一个char类型的字符),将flag赋值为1,进行匹配后成功则跳出循环,不成功将flag赋值为0,最后用if判断栈是否为空或者flag是否为1,并按要求输出yes或no,基本问题不大。

银行排队问题

虽然题目看起来很复杂,但它实际上就是入队和出队另一种表现。我用了循环队列的形式,一样的定义顺序结构,初始化循环队列、输入元素输出元素。唯一有一些头疼的地方就是,由于要定义两个队列A、B,输出顺序有所不同,首先要考虑AB两个队列都不为空的情况,这时候判断条件为:while((QA.front!=QA.rear)&&(QB.front!=QB.rear)&&(QA.rear-QA.front)%1000>=2),两次A队出队,一次B队出队,之后还要考虑B为空A不为空,判断条件:

 while(QA.front!=QA.rear),A为空B不为空:while(QB.front!=QB.rear),将依次输出的数字放到新定义的数组中去,最后将数组输出即可。

经过作业和实践,我对链表的使用也更加清晰,对数据结构的真实含义有了更进一步的理解:数据结构是把我们之前所学过的最基本的语法进行叠加改造,最后组成一个功能更强的语句,便于我们解决后续更多复杂的问题,实现更复杂的算法。

上一篇:安装 nginx 教程


下一篇:后期添加task和case