双向链表
1 线性表的双向链表存储结构
typedef struct DulNode { ElemType data;
struct DulNode *next;
struct DulNode *prior;
} DulNode;
typedef struct DulNode *DulLinkList;
2 既然单链表有循环链表,双向链表也有循环链表
双向循环链表带有头结点的空链表:
双向循环链表带有头结点的非空链表:
3 双向链表的插入操作,注意要修改两个指针变量。
假设要在p和p->next之间插入一个数据为e的元素s。
s->prior = p; s->next = p->next; p->next->prior = s; p->next = s;
以上代码一定要注意顺序。
4 双向链表的删除操作,注意要修改两个指针变量。
p->prior->next = p->next; p->next->prior = p->prior;
free(p);
注意要释放p。
5 由于双向链表的每个结点需要记录两个指针,所以会占用更多的内存。但是对结点的前后结点的操作带来了方便。换句话说就是,用空间来换取时间。