線性表之迴圈連結串列的基本操作(c語言)
阿新 • • 發佈:2021-01-17
- 本文將著重介紹雙鏈表的迴圈連結串列操作
目錄
定義
- 迴圈連結串列中最後一個結點的指標域指向頭結點,整個連結串列形成一個環。
單鏈表
儲存結構
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;
}