定义
- 循环链表中最后一个结点的指针域指向头结点,整个链表形成一个环。
单链表
存储结构
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
初始化
bool InitList(LinkList &L)
{
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)return false;
L->next=L;
return true;
}
双链表
存储结构
typedef struct LNode{
int data;
struct LNode *next,*prior;
}LNode,*LinkList;
初始化
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)return false;
L->prior=L;
L->next=L;
return true;
}
插入
bool InserNode(LNode *p,LNode *s)
{
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;
}
删除
bool DeleteNode(LNode *p)
{
LNode *q=p->next;
p->next=q->next;
q->next->prior=p;
free(q);
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 InserNode(LNode *p,LNode *s)
{
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;
}
删除
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 DeleteNode(LNode *p)
{
LNode *q=p->next;
p->next=q->next;
q->next->prior=p;
free(q);
return true;
}
上一节:线性表之双链表的基本操作(c语言)
下一节:栈的基本操作(c语言)