数据结构第3章学习小结 1803 纪如燕 20181002931

  第3章学习的是线性结构中的栈和队列。由于栈限定仅在表尾进行插入或删除操作,而队列只允许在表的一端插入,在另一端删除元素,因此极少用栈和队列来进行插入删除操作。其中栈是先进后出的线性表,而队列是先进先出的线性表。栈和队列的存储结构分为顺序存储和链式存储。他们的实现步骤大致与顺序表和链表相同,出栈和出队相当于顺序表和链表的遍历。需要注意的是,在初始化栈的时候,规定栈顶为多少为空时,必须唯一,不能出现二义性。

  在完成括号匹配这道题的过程中,在主函数中,一开始是使用gets()函数来输入字符串,但是运行的结果是只有输入,没有输出。后来上网查了一下cin>>、gets()、cin,getline()、cin.get()、getline()的区别。

  他们的区别:cin>>是最基本、最常用的输入,cin>>不接受空格、回车、Tab这些字符,只要遇到空格、回车、Tab,意味着输入结束。

                       gets()接受一个字符串,可以接收空格并输出,需包含头文件“#include<string>”,gets()和cin.getline()的用法很相似,但cin.getline()比gets()多一个参数,而且gets()是C语言里的                     

                       cin.getline()接受一个字符串,可以接收空格并输出,cin.getline()实际上有三个参数,cin.getline(接受字符串,接受个数,结束字符).当第三个参数省略时,系統默认为'\0'

                       cin.get(字符数組名,接收字符数目)用来接收一行字符串,可以接收空格   cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足  cin.get(字符变量名)可以用来接收字符

                       getline()和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

括号匹配这道题一开始是取栈顶元素的值与当前扫描的右括号判断是否匹配,在进行左括号的出栈,但这就会造成一种结果,当输入{【}】时,前两个左括号入栈,第三个元素和当前栈顶元素判断是否匹配,结果是不匹配,这样最终结果就是只有【出栈了,而{没有出栈,栈不为空,最终结果为不匹配。后来就改成了先出栈再进行判断,使用了for循环语句,在for循环语句之前,定义了flag=1. 当扫描到是(、{、【三种左括号之一时,入栈,当扫描到)、}、】三种右括号时,出栈。再将出栈元素和扫描到的元素进行匹配,如果匹配,进行下一个元素的扫描,如果不匹配,使flag=0

 

银行业务这道题用的是链队,这样不用考虑队满的问题,根据题目的意思,定义了两个队列,奇数入A队列,偶数入B队列,当客人为1个的时候,此时A队列空、B队列不空或者A队列不空、B队列空,此时只需输出客人的编号。当客人多于1个时且A队列和B队列都不为空时,先输出队列A出队的编号,接着判断队列A是否仍然是非空,如果是非空,再输出一个队列A的客人和一个队列B的客人;如果队列A空,则跳出A队列和B队列都不为空的循环。除此之外还要判断A队列和B队列都不为空这个循环是否第一次执行,若为第一次执行,则第一个输出的客人前没有空格,若不为第一次执行,则第一次输出的客人前有空格

  栈和队列存储结构的确立、初始化、入栈\入队、出栈\出队参考课本。

  学习过程中有一些细节问题没有看出来,需要靠同学帮忙检查,才能看出来哪里有问题。而且做题的速度比较慢,经常需要翻书。

  接下来的目标:加快做题速度,回顾第2章顺序表和链表的实现

 

posted on 2019-03-31 22:20  ChrisMua  阅读(135)  评论(2编辑  收藏  举报