第三章 栈和队列
一、本章主要学习了栈:先进后出;队列:先进先出;
1)类型定义——初始化——出入栈——判断栈空栈满——取栈顶元素——递归(不太熟)
类型定义——初始化——出入队——判断队空队满(顺序队要用循环队列,避免溢出情况)——取队头元素——求队列长度
2)链栈和顺序栈区别在于
1、有时不知道栈的大小,顺序栈会受到最大空间容量的限制,而且容易造成空间浪费
2、入栈时,链栈不用判断是否栈满;出栈时,链栈需要释放空间
二、在学习中遇到到以下一些问题及解决办法:
1)起初我不清楚为什么出入栈时是*s.top++和*--s.top,而不是*++s.top和*s.top-- ?
后来才弄清原来,栈顶元素并不是指向最上面的那个元素,而是指向最上面那一个元素的再上一个位置,所以当入栈时,先把e赋值给s.top就等于直接把e放在了原来栈顶元素的再上一个位置上,再s.top++; 同理出栈
2)作业题,括号匹配时,提交中有一个错误是在最长字符串时出现错误,原因:
上学期一个知识点,cin.getline( , ),第一个参数是数组名,第二个参数减1才为可输入的最大字符个数,而题目给出最大数量是100,所以这里应该是101,而不是100。
3)提交中还出现过一个错误:返回非零,原来PTA上要求最后一定是返回零,我之前用了exit()所以出现错误 ,然后就查了一下return 0 和exit()的区别:
return是函数的退出(返回);exit是进程的退出:
所以在主函数使用区别不大,在非主函数使用则区别明显
exit(0)是程序正常退出
exit(1)是程序非正常退出
4)代码的封装性不好,关于栈的基本操作函数应该封装起来,然后再在主程序中调用,比如判断栈空栈满,取栈顶元素等。
5)实践题——银行业务队列简单模拟,也有一些问题:
出现过段错误:查了一下,段错误——是因为数组越界, 堆栈溢出等,
因为书本上在队列一章中有提到溢出现象,跟尾指针加一的方式相关,尾指针应依环状增1,所以后来检查代码时,我专门查看相关的代码,发现时是求队列长度中“return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;” 中%符号写错了...🤦
三:接下来的目标:
1、经常习惯用顺序机构,链式的栈和队列的使用不太熟,还有递归问题,把这些弄更清楚一些
1、继续保持好奇,发现问题,遇到一些小问题也要重视然后认真寻找答案

浙公网安备 33010602011771号