第三章学习小结
数据结构第三章栈与队列学习小结
在这一章中,我们学习了栈和队列,栈和队列都有顺序结构和链式结构两种存储结构,
栈只能在栈头插入删除,而队可以在队头删除,队尾插入,但是从上课和PTA中,我发现可能栈是本章的重点比较多。
栈:
通过对比书上和课件对顺序栈的基本操作的代码,我发现了,对于顺序栈有两种数据类型的表示。1)将top和base定义为指针型,表示的是存储空间的其实地址,所以我们在后续初始化的过程中需要申请动态空间。
2)将top和base定义为非指针类型,此时在初始化的过程中,就不需要申请动态空间了,因为已经提前定义了静态数组空间。
除此之外我发现了顺序栈中表示栈空其实有很多方法:
①S.top==S.base ②S.top=0 ③S.top=-1
关于top做指针的时候有①top为栈顶指针,其初值指向栈底;插入新的元素,指针加一;②删除时减一;③栈非空的时候,top始终指向栈顶元素的上一个位置
在写PTA的括号匹配那道题的时候 我发现我刚开始用switch函数的时候,答案总是部分正确
其实关于更好地理解栈的结构,可以到慕课上上网课
实例应用如表达式求值:
而对于栈的链式结构其实就是单链表,在链栈中,主要的问题是要不要设置头结点?
其实头结点作用:1.由于头结点指向下一个元素,所以一般在栈头进行数据的插入和删除
头结点不代表任何一个元素,只是有了头结点可以更好地找到下面的结点
2.头指针和栈顶指针合二为一
与顺序栈不同的是:链栈当中入栈和出栈不需要判断栈满或栈空
实际应用:1中缀表达式变为后缀表达式
队:
在队中最重要的是循环队列,我认为最重要是记得几个公式:
①Q.front=Q.rear;②(Q.rear+1)%MAXSIZE==Q.front
③((Q.rear-Q.front)+MAXSIZE)%MAXSIZE
值得注意的是队空和队满的表示都是一样的