(原创)数据结构栈与队列知识小结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(原创)数据结构栈与队列知识⼩结
本章介绍了两种特殊的线性表:栈和队列,主要内容如下:
(1)栈是限定仅在表尾进⾏插⼊和删除的线性表,⼜称为后进先出的的线性表。
两种存储结构:(顺序表⽰)顺序栈、链栈(链式表⽰)。
主要操作:进栈、出栈;
对于顺序栈的进栈和出栈注意要判断栈满和栈空;
(2)队列是⼀种先进先出的线性表。
它只允许在表的⼀端进⾏插⼊,⽽在另⼀端删除元素;
两种存储结构:(顺序表⽰)循环队列、(链式表⽰)链队;
主要操作:进队、出队。
对于顺序的循环队列的进队和出队操作要判断队满或队空;
凡是涉及队头或队尾指针的修改都要将其队MAXQSIZE求模;(这是我学这⼀章感觉最巧妙的地⽅觉得特别巧妙,⽤这种⽅式实现循环);
接着就是学习关于栈和队列的种种操作;
1、⽤栈实现的学习了两个案例:数制转换和括号匹配以及递归;
1)关于数制转换这⾥,⽼师当时讲的那个直接返回结果,⽤while(.......... sum = sum*10+tmp),这⾥的tmp是n每次%10取出的数字;最后返回sum即是结果,我觉得⼗分巧妙,⾃⼰当时是没想到的;⾃⼰当时想的是⽤⼀个字符串存起来,再将它倒置即可;
2)括号匹配这⾥,我觉得思想也⼗分巧妙;⼀开始我是想说不⽤栈实现可以吗,然后就⽤⾃⼰的⽅法取实现,⼀开始有⼀点像双向队列的思想,主要是被⼀种形式限制住了,以为括号匹配是这种[{}],或者[[[(({}))]]],所以我每次都取头跟尾进⾏匹配,发现总是有⼏个测试点过不了,后来发现,其实括号匹配还可以这种形式:(){}[],这种也算是匹配成功,所以我⼀开始的那种思想就被打破了;⼀开始我总觉得我那种做法是对的,但是就是过不了,后来思想转换了,每次将最近的括号进⾏匹配,其实这种就是栈的思想;后来就⽤栈取实现,不过我⽤的是stl ⾥的函数,直接拿来⽤,⽼师叫我不⽤stl的东西,⾃⼰写⼀写底层的东西,后来就实现了;
3)递归:递归这⾥我觉得我是学的不是那么熟的,很少⾃⼰写过递归,上学期是学过递归的,但是没有⾃⼰实现过,虽然懂它的思想,但是从思想上升到⾃⼰实现还是有⼀⼤段路要⾛的,然后这学期⽤过递归,主要是在ACM中师兄教了那个深度搜索(dfs)但是⾃⼰其实也还不是那么熟练。
2、队列
队列的话,⽼师给了我们⼀道编程题,银⾏队列窗⼝模拟,⼀开始也是⽤stl去实现,然后再把stl的底层慢慢去实现;
总结:关于上次定的⽬标,我觉得没有百分百达到;
这章我觉得我得还好,课本的知识其实不是那么熟,觉得课本有时讲的太冗长,但是正是这些底层实现的东西我们还是需要去学习的,不能总是拿现成的来⽤;
下⼀章的学习⽬标:希望⾃⼰能悟出下⼀章算法的思想精髓,学到⼀些很巧妙的思想,并能⼜思想上升到实现的阶段!。