总结
思维导图
重要概念的笔记
线性表 顺序存储结构 删除或插入一个数据,时间复杂度为o(n),除非删除或插入最后一个数据。
读取一个数据时间复杂度为o(1)。
内存分配在编译时已确定,容易造成内存浪费。
链式存储结构 删除和插入一个数据,时间复杂度为o(n),除非删除或插入第一个或最后一个数据。
查找一个数据时间复杂度为o(n)。
内存分配在程序执行时发生,不会造成内存浪费。
栈和队列 栈是先进后出,队列是先进先出。
可以直接使用#includestack<int>s1
来定义栈,就可以直接使用栈的功能。
s1.push(x)
,是入栈,s1.top()
是查看栈顶元素,s1.pop()
是出栈,s1.empty()
是判断栈是否为空,s1.size()
是查看栈中有多少元素。
也可以使用#includeq.push(x)
是入队,q.pop()
是出队,还有q.front()、q.back()、q.size()、q.empty()
。
队列中rear指向队尾的位置,front指向队头的前一个位置。
串 空格串是只包含空格的串,空串是零个字符的串。
BF匹配模式,思路简单,但时间复杂度太大。
KMP匹配模式,思路复杂,时间复杂度小
串也是可以链式存储也可以顺序存储,链式存储可以几个单词存在一个结点里,比较方便。
算法 一个好的算法就是在达到相同目的的前提下,空间复杂度和时间复杂度更小就更好。
o(1)<o(logn)<o(n)<o(nlogn)<o(n²)<o(n³)<o(n!)
#疑难问题及解决方案
如何用链表来存储学生信息管理系统,并能够进行查找,删除,遍历,统计的功能?
解决方案是:运用文件的知识,将信息先存储在文件里,之后运行时,先在主函数里读取文件信息,形成新节点从而形成新链表。
如何计算next 和nextval的值?
解决方案是:上课理解,不懂的看别人写的博客。