目录
一、线性表 38
二、顺序表 39
三、链表 45
解决问题:解决顺序表查询增删效率比较慢的问题。
3.1单向链表 46、47、48
头结点:不存储任何数据,只是能够找到下一个数据即可。
3.2双向链表 49
双向链表的指向是双向的。双向箭头。
3.3链表反转 (面试中高频题目) 56
本部分的代码,是在原来linear/LinkList基础上进行增加的。添加reverese方法和一个结点处理。
3.4快慢指针 57
3.4.1中间值问题 57
该部分在代码\test\FastShowTest中。
原理部分在PPt P27
3.4.2单向链表是否有环问题 58
使用快慢指针判断链表是否有环问题。
思路:
有环:快慢指针会有相遇的那一刻
无环:快慢指针不可能有相遇的那一刻
有环和无环的判断:有环的最后一个结点指向了前面的结点。
本部分实现的代码:在/test/CircleListCheckTest中
3.4.3有环链表入口问题 60
该部分也涉及使用到快慢指针
本部分代码的实现在/test/CircleListTest中。判断的方法名称:getEntrance。
3.5循环链表 61
代码部分的实现查看ppt P36
3.6约瑟夫问题 62
本部分代码在/test/JosephTest中
主要的内容参考ppt P37。
3.7栈概念 65
3.7.1栈的了解 65
本部分看ppt P40
3.7.2栈的代码实现 66
代码在/linear/Stack中
其他部分的实现代码:67
3.7.3括号匹配问题(栈的应用) 68
原理实现的分析:68
代码:在/test/BrancketsMatchTest中实现代码 69
3.7.4逆波兰表达式求值问题 70
对于逆波兰表达式的解释:70
1、ab:在操作数后面添加+
2、abc-+:先bc操作数进行-处理,然后整体的结果a和bc处理后的结果做+
代码的实现:71
代码在/test/ReversePolishNotationTest中