1.基本数据类型区分如下:
2.线性表:
2.1顺序表:
元素在内存之中,是连续顺序存储的,在内存中划分的是一块连续的区域
2.2链表:
在一块内存中分散存储,结点之间以指针连接(逻辑上成为一个整体,物理分散,逻辑整体)
2.2.1链表的类别
单链表:从头结点开始,单向的连接起来的数据结构,每一个结点有两个域(前面为数据域,后面为指针域指向下一个结点的地址)
单链表结点的删除:将a1的指针域直接指向a3即可,a2直接释放
单链表结点的插入:直接将P的指针域指向S,将S的指针域指向a3所在结点
具体如下:先将S和和a3所在结点连接(a3原来为P--next,将P--next赋值给S--next),再连接P和S(将S肤质给P--next)。
话描述起来有点绕,就是如果P先连接S,P--next的值就会变化。a3由P--next指向连接,a3的P--next 和 新的P--next不一致,就无法连接了,脱节了。
循环链表:和单链表非常相似,循环链表的最后一个结点的指针域,指向头结点,形成了一个循环
双链表:有两个指针域,前面一个后面一个,从两个方向将结点连接起来,形成了双链表,可以朝两个方向移动。灵活度优于单链表,但内存开支更大。
双链表的删除:直接删除和单链表一样
双链表的插入:可以拆分为两个单链表的插入(只是想象的),实际顺序是 将插入结点先分别指向两个后继结点,再由两个前结点指向新插入的结点
2.3顺序表和链表的比较
2.4栈(先进后出)
栈只是一个逻辑概念仅此而已,栈既可以用顺序存储实现,也可以用链式存储实现
先进先出:进一个出一个,但如果栈中数据已经固定,就只能先进后出了
2.5队列(先进先出)
普通形式队列,顺序结构
循环队列
head 头指针 0
tail 尾指针 元素的下一个位置
当未记录元素时,队头指针和队尾指针针在同一位置,存入新元素时,尾指针后移
head = tail 队列可能为空也可能为满,避免这种情况混淆,牺牲一个空间,当tail在倒数第一个时为满,tial+1=head 为判满条件。
一定要注意 tail 是在最后一个实际元素之后的 tail是队尾指针 没有值