线性表思想小结
一、链表:单向链表 单向循环链表 双向链表 双向循环链表
(按表头节点还可分:是否带表头节点的链表)
(按照链表的生成方式还可以分为动态链表和静态链表)
操作:
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