一、定义:
逻辑关系:首元素没有直接前驱,尾元素没有直接后继,其余元素有且只有一个直接前驱和直接后继。
具体分类:表,栈(先进后出),队列(先进先出)。
存储关系:顺序表,链表,顺序栈,链式栈,顺序队列,链式队列。
二、顺序表和链表:
顺序表:以数组形式保存的线性表。以下标进行引用。
链表:链式存储,以节点方式链接,节点中保存当前节点的数据和下一节点的位置。
增加:分为头插和尾插两种方式
头插:从头部插入,头插可以在除了尾部之后的任意位置进行插入。
头插可以代替尾插(即在NULL前插入)
具体操作如下:
step1:通过头节点H移动到需要插入节点的上一个节点;
step2:将插入节点的next指向当前头节点的next,即完成红线1;
step3:将当前头节点的next指向插入节点,即完成红线2,断开黑线1,完成节点的插入;
尾插:从尾巴插入,只能在末尾插入。
具体操作如下:
step1:通过头节点移动到最后一个节点的位置。
step2:将当前头节点的next指向插入节点,完成红线1。
step3:将插入节点的next指向NULL。
头插和尾插:
头插可以代替尾插,而尾插不能代替头插。头插可在任意位置插入,而尾插不行。所以我们一般使用头插。
删除:具体操作如下:
step1:通过头节点找到要删除节点的前一个节点;
step2:用p记录要删除节点的位置;
step3:当前头节点的next指向p的next,完成红线;
step4:释放删除节点的空间,完成删除。
顺序表和链表的优缺点:
顺序表:通过下标访问元素。方便查找,修改。但是增加和修改需要元素移动位置,不方便。
链表:通过节点方便插入和删除,空间灵活,但是查找和修改不方便,遍历比顺序慢(因为空间可能不连续)。
二、顺序栈和链式栈:
顺序栈:定长,不灵活。但是操作简单,效率高。
链式栈:长度灵活,效率相对没那么高。
其增删改查与顺序表,链式表异曲同工,只是数据具有栈先进后出的特点。
三、顺序队列和链式队列:
顺序队列/循环队列:定长不灵活,操作简单,效率高。
链式队列:长度灵活,效率相对没有那么高。
其增删改查与顺序表,链式表异曲同工,只是数据具有队列先进先出的特点。
四、循环链表和双向链表:
循环链表:由于链表只保存节点的下一个节点的位置,所以无法通过当前位置访问其前面的内容。将尾节点的next指向头节点,首尾相连,就可以通过循环的方式访问当前节点前面的节点。
双向链表:每个节点包含两个指针域,一个指向上一个节点,一个指向下一个节点,就可以实现链表的双向访问。