线性表
n个数据元素的有限序列,最常用的是链式表达,通常称为线式链表或者链表。在链表中存储的数据元素也叫结点,一个结点存储的就是一条数据记录。每个结点的结构包括两个部分:数据和指向下一个结点的指针。
单向链表:
双向链表:
循环链表:
双向循环链表:
插入删除比较高效,查询需要挨个遍历比较,但是一般插入删除伴随着查询。线性表真正的价值在于,它对数据的存储方式是按照顺序的存储的。如果元素个数不确定,且经常进行新增删除,链表合适。如果数据元素大小确定,删除插入操作不多,那么数组可能更合适。
案例:
1、反转
栈
栈:一种特殊的线性表,结点数据满足后进先出。
与链表、数组相比,站的操作更受限制,为什么要使用?数组和链表暴露了过多可操作的接口,当数据量大时,可能会带来风险。典型场景:浏览器页面的前进后退、括号匹配。
表头通常称为栈底(bottom),表尾通常称为栈顶(top)。
顺序栈&链式栈
顺序栈
数组实现。
链栈
链表实现。
队列
特殊的线性表,元素先进先出
顺序队列
数组实现。
删除之后如何移动数据?循环队列。
这时rear重新指向0位置,当队列为空时,front 指针= rear 指针,当队列满时,front 指针= rear 指针,通常会加一个标志变量来区别。
链式队列
链表实现。
为什么使用带头结点的单链表?防止front和rear在删除最后一个元素之后变成也指针。
典型场景:约瑟夫环问题。