概念
- 双链表的每个数据结点中都有两个指针,分别指向后继结点和前驱结点。
存储结构
typedef struct LNode{
int data;
struct LNode *next,*prior;
}LNode,*LinkList;
- LinkList和LNode是不同名字的同一个指针类型。
- *LinkList类型的指针变量head表示它是单链表的头指针。
- LNode类型的指针变量p表示它是指向某一结点的指针。
初始化
bool InitLinklist(LinkList &L)
{
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)return false;
L->prior=NULL;
L->next=NULL;
return true;
}
插入
bool InsertNode(LNode *p,LNode *s)
{
if(s==NULL||p==NULL)return false;
s->next=p->next;
if(p->next!=NULL)
p->next->prior=s;
s->prior=p;
p->next=s;
return true;
}
删除
删除后继结点
bool DeleteNode(LNode *p)
{
if(p==NULL)return false;
LNode *q=p->next;
if(q=NULL)return false;
p->next=q->next;
if(q->next!=NULL)
q->next->prior=p;
free(q);
return true;
}
销毁链表
bool DestroyNode(LinkList &L)
{
while(L->next!=NULL)
DeleteNode(L);
free(L);
L=NULL;
return true;
}
上一节:线性表之单链表的基本操作(c语言)
下一节:线性表之循环链表的基本操作(c语言)