线性表思想小结

来源:互联网 发布:java线程同步的方法 编辑:程序博客网 时间:2024/06/06 10:54

线性表思想小结

一、链表:单向链表 单向循环链表 双向链表 双向循环链表
(按表头节点还可分:是否带表头节点的链表)
(按照链表的生成方式还可以分为动态链表和静态链表)
操作:
1.添加节点

单向链表为例

单链表添加

技巧:先处理要插入的节点,可以防止节点丢失
步骤:q ->next = p->next;
p ->next = q;

2.删除节点

双向链表为例

双向链表删除节点

步骤:p->next = q->next; // 将p节点与q后面的节点相连接
q->next->pre = p ;//将q节点后面节点的前驱指向p节点
free(q); //释放要删除的q节点

3.链表 查询

实质为对链表的遍历,看节点的数据域里是否有匹配的信息若有则退出,返回当前节点指针
a.对于双向有序的链表,可以考虑当前current指针的位置进行向前或着向后的遍历查找
b.对于双向循环链表,若大致可知信息位于链表的中后段即可通过前驱指针pre对链表进行逆向遍历。

4.链表 销毁

用循环进行销毁
原理向相同:后判前删

链表销毁

while (q != NULL){    free(p);    p = q;    q = p->next;}free(p);    //当q为指向空的时候,删除最后一个p节点(其他链表的处理方式相类似)

5.静态链(游标实现法)表简结
(用结构体数组实现,用游标模拟指针的作用)
静态链表

结构体定义:
typedef struct {    char data;    int cur; //代替了指针域  为游标}Static list;

二、堆的思想:

手动分配与释放

三、栈的思想:First In Last Out

对数据进行处理由 栈顶 开始(即从一端来处理数据)

四、队列的思想:First In First Out

与栈不同的是,队列的规则是:前删后加:在前端进行删除,后端进行添加(简而言之,操作端有两个,分别实现不同的作用)
——为了节省空间,循环队列就来了:利用求余的运算方式可将数据再次存入已空的队列前头(只是一个普通的顺序队列存储空间单元,利用求余运算对其进行了重复的使用,从而达到一种循环的效果(此处要注意对队列的判空处理))

队列简单示意图

0 0