第三章小结--栈与队列

第三章小结

第三章我们主要学习了栈和队列。经过第一次的写博客,与课后的学习与借鉴。我看到很多其他的同学在整理知识的时候采用了画大纲图,架构图的方法。不得不说,那样子确实比纯粹的文字更加简单明了。于是我决定也学习和效仿一下。

以下便是图解:

通过大图来看,很明显,和前面学习的顺序表,链表栈和队列的操作有同工异曲之妙。实际上围绕着栈和队列的也是分为两大分支,顺序表和链表。操作也是从初始化,插入,删除,查找几个操作入手。

当然,也有不同的地方,栈是典型的先进而后出,队列则是先进先出,其插入和删除的操作都是在头和尾进行操作的。

其中,在这一章的学习中,令我最印象深刻的是老师给我们讲的,针对于队列链表,是否需要头结点问题的讨论。对于是否需要,关键在于边缘问题的解决是否与非边缘问题一样。由此便需要进行对边缘化问题的分析与理解。在分析的过程,需要充分考虑许多的因素,很多细节都需要被注意到。

这一章节的作业题,括号匹配,一开始看到的时候我确实完全不知道如何入手。觉得这个问题用代码来解决实在没有多大的可能。上课的时候,发现书本也有关于这个问题的解答,很明显了就是要用栈来解决。当然,这时候我也还是没能够理解的很透彻。毕竟也只是一个初步的想法,知道了存储结构,要将想法实现还需要代码的构建。

真正给我启发的是班长在班群上发的一个图,里面简单地描述了这道题的算法。不得不说真的有被打通了任督二脉的感觉。

那个图里面是一个简单的匹配过程。存储在栈里面的都是左半边的括号。而遇到了有括号的时候则采取了出栈的措施,这时候再检查两者是否匹配即可了。当然最后要做的就是验证栈是否为空,为空即成功。

(以上三个图即为解题的思路与启发的图片)

然而事情并没有想象中的那么简单,在周一下课后我便开始改我的代码了。改了好几个钟,终于差不多了,可虽然没有语法错误,逻辑思维也对了,可运行出来的就不是正确的结果。无论输入什么,结果都是“no”。检查了一遍又一遍,还是查不出错误。直到第二天,上课问了老师之后,我才找到了问题的源头:

一开始,我缺少了 return false语句,因此如论如何,函数的返回值都是true,到最后也就无法判断出正确的结果了。

虽然过程有些曲折,但还好结果还是好的。通过这件事,我从中明白了:

写一个程序,说起来容易,实际上有许多的细节都是需要注意的。

①要有清晰的思路,明白自己主要要解决的是什么问题,关键是要解决什么问题。如此章的括号匹配问题,既要解决输入符号带空格这类小的问题,也要解决如何进行匹配的这类主干问题。有了思路再动手会更加流畅。

②关于程序总是调试错误的情况,其实可以通过插入一些输出的句子,来判断前面进行的操作是否正确。从而找到出问题的地方,也能够更好地对症下药了。

③细节往往决定成败,很多时候程序的运行不成功的原因都是因为一些细节。如我刚刚提到的漏掉了return false,或者说判断两边等于的时候采用了“=”赋值号。这些都是细小的错误,然而也都是致命的错误。因此关注细节很重要。

在这章的学习中,我参考了这些网站的资料,我觉得总结的挺好,值得我们去借鉴。

https://www.cnblogs.com/luolizhi/p/5746775.html                  C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

 https://www.cnblogs.com/hughdong/p/6841337.html      数据结构 | 链表队列(基本操作及图示)

https://www.cnblogs.com/biglucky/p/4651254.html          用链表实现队列的功能

       经过了一个月,我感觉得到打代码的感觉慢慢回来了。但现在还是存在一些问题,我想要课余时间做一些有趣的代码。例如我寒假模仿写了一个推箱子的小游戏。因此目前要解决一些问题。找更多的时间去写一些有趣的代码。既提升自己对写代码的兴趣,又可以多动脑,多动手,多思考。

上次的目标是在课余时间更加自主地学习,我觉得我完成还比较可以。在遇到问题时,能够比较冷静面对,独自思考,参考一些有价值的资料。接下来的目标,我希望在下一次的小结前我进行模仿可以弄出来一个贪吃蛇的小游戏,又或者是别的的小游戏,或者是一些比较有趣的代码吧。

原文地址:https://www.cnblogs.com/ilikezero/p/10625388.html

时间: 2024-11-05 23:26:03

第三章小结--栈与队列的相关文章

【自考】数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇

学习目标 自考重点.期末考试必过指南,这篇文章让你理解什么是栈.什么是队列.什么是数组 掌握栈.队列的顺序存储结构和链式存储结构 掌握栈.队列的基本操作在顺序存储结构和链式存储结构上的实现 掌握矩阵的压缩存储 今天核心咱们先把栈搞清楚 栈和队列可以看做是特殊的线性表 .它们的特殊性表现在它们的基本运算是线性表运算的子集,它们是运算受限的线性表 栈 栈(Stack)是运算受限的线性表,这种线性表上的插入和删除操作限定在表的一端进行 基本概念 栈顶:允许插入和删除的一端 栈尾:另一端 空栈:不含任何

数据结构读书笔记----------第三章 栈和队列

3.1  栈的定义 栈是限制在表的一端进行插入和删除操作的线性表.允许进行插入,删除操作的一端是栈顶.另一个固定端称为栈底,当表中美柚元素时候称为空栈.是一种后进先出的线性表. 3.2 栈的顺序存储和运算实现 #define MaxSize 100 typedef int DataType; //栈的顺序存储定义 typedef struct { DataType data[MaxSize]; int top; }Stack; //栈的初始化 Stack *Init_Stack() { Stac

DS第三章小结

一.你对本章内容的小结 本章主要讲了两种特殊的线性表,栈和队列.栈是仅在表尾进行插入或删除操作且后进先出(LIFO)的线性表,而队列则是在表的一端插入,另一端删除元素且先进先出(FIFO)的线性表.同时,课本的案例引入告诉我们,栈可以解决数值的转换,括号匹配的检验问题:而队列因其结构的吻合可以用了舞伴问题. 下面是本章的思维导图.对我来说,第三章比第二章更抽象,晦涩,难懂,仍然需要通过练习来对机械地吸收的知识加以运用. 二.完成作业实践时的心得体会 首先还是要多看课本,把基本的入栈,出栈,入队,

汇编语言第三章小结

第三章 内存访问 字数据在内存中的存储 1.      内存以字节为单位,划分为若干个单元 2.      字数据的存-取原则:高-高  低-低(小端法) 即: ① 字数据的低位字节存放在低地址内存单元 字数据的高位字节存放在高地址内存单元 ② 取低地址内存单元地址作为字数据地址 例1: 字数据124EH的地址是( 1 ) 字数据3020H存入内存后地址为4,则4存放( 30H ),3存放( 20H ) 例2: 从地址单元1取出一个 (1)     字节数据为:  4EH (2)     字数据

第三章小结

第三章学习了栈和队列. 有一个要搞清楚的点是 栈和队列的每一次操作都只对一个元素起作用.之前在学习计概这门课的时候,就已经接触了栈和队列的知识,知道LIFO和FIFO结构.但是没有学太深. 现在知道了栈和队列的作用以及一些基本的算法和主要操作. 总结: (1)顺序栈与链栈 主要操作:1.InitStack(SqStacke &S)(初始化)2.Push(SqStack &S,SElemType e)(入栈)3.Pop(SqStack &S,SElemType &e)(出栈)

数据结构之第三章之栈

栈和队列其实就是操作受限的队列. 1--栈的特点:栈是限定仅在表的另一端(栈顶)进行插入,删除操作的线性表,是后进先出的线性表. 2--顺序栈 (1)顺序栈的存储表示 typedef struct Node{ struct Node *base;//栈底指针,在栈构造之前和销毁之后,base的值为NULL struct Node *top;//这个是栈定指针,用以压栈的位置. int size;//当前已分配的存储单元数,以元素为单位 }NODE,*PNODE; (2) 压栈操作 int pus

JAVA-初步认识-第三章-小结

一. 概论 第三章讲述的是JAVA语言基础,分为八个部分:关键字,标识符,注释,常量和变量,运算符,语句,函数和数组. →运算符(对于某种操作,浓缩为符号,上层的程序员采用这种符号.底层根据符号的不同,对数据做出不同的操作.) →要了解运算符的本质.→运算符的诞生,还是源于计算机程序语言的设计特点决定的. →计算机语言是对现实世界的,解析,重构.(用特定的计算机语言结构,但是最终的结果是一样的,过程也是一样的,和现实中的计算相比) 注意:用另一种方式,来重现现实世界的过程和结果. 用运算符对一些

第三次作业-栈和队列

1.学习总结 2.PTA实验作业 2.1 题目1:7-1 jmu-字符串是否对称(20 分) 2.2 设计思路(伪代码或流程图) 2.3 代码截图   2.4 PTA提交列表说明. 题目2:7-2 符号配对(20 分) 2.2 设计思路(伪代码或流程图) 循环中判断是否读到左符号,是则进栈, 读到右符号判断是否为空,若不为空则出栈,直到循环结束若是不配对则输出NO反之则输出YES 2.3 代码截图 2.4 PTA提交列表说明 题目3:7-1 jmu-报数游戏(15 分) 2.2 设计思路(伪代码

第二章、栈、队列、链表

第一节.解密QQ号——队列p29 解密QQ号——队列 #include <stdio.h> int main() { int q[102]={0,6,3,1,7,5,8,9,2,4},head,tail; //int i; //初始化队列 head=1; tail=10; //队列中已经有9个元素了,tail执向的队尾的后一个位置 while(head<tail) //当队列不为空的时候执行循环 { //打印队首并将队首出队 printf("%d ",q[head])