1. 程式人生 > 其它 >線性表之迴圈連結串列的基本操作(c語言)

線性表之迴圈連結串列的基本操作(c語言)

技術標籤:資料結構指標連結串列資料結構

  • 本文將著重介紹雙鏈表的迴圈連結串列操作

目錄

定義

  • 迴圈連結串列中最後一個結點的指標域指向頭結點,整個連結串列形成一個環。

單鏈表

儲存結構

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語言)