2020資料結構 線性表(4)

2021-09-25 10:31:50 字數 2438 閱讀 7827

2.4.1單向迴圈鍊錶

在單向鍊錶的基礎上,在其最後乙個結點的指標域中將空指標改為指向頭結點的指標,此即為單項迴圈鍊錶。

常用的單項迴圈鍊錶有兩種,一種是帶頭指標的單項迴圈鍊錶,另一種是帶尾指標的單項迴圈鍊錶。

帶頭指標的單項迴圈鍊錶判斷為空的條件:l->next == l

帶尾指標的單項迴圈鍊錶的判斷為空的標誌是:r->next == r

如果有兩個帶尾指標的單向迴圈鍊錶進行連線的話需要進行四步運算:

//r1為第乙個鍊錶的指標,r2為第二個鍊錶的指標

1.p = r1->next;q=r2->next;

2.r1->next = r2->next->next;

3.r2->next = p;

4.free(q);

在進行單向迴圈鍊錶的操作時,唯一不同的是需要進行是否為空的判斷,下面是單向迴圈鍊錶的操作

1.初始化

建立帶有頭結點的單向迴圈鍊錶,即讓頭結點的指標域記住自己(因為在最開始建立的時候只有乙個結點,所以頭指標的尾結點需要需要指向自己)。

int initcirlink(linklist *l)
2.插入

根據插入位置i,將指定資料元素插入到第i-1和第i個結點之間。

//pos用來判斷是否到了最後乙個,判斷插入位置的異常。

int insertcirlink(linklist l,int i,elemtype x)

if(p->next == l && pos < i-1||pos>i-1)

s=(linklist)malloc(lnode);

s->data = x;

s->next = p->next;

p->next = s;

return 1;

}

3.刪除

根據刪除位置i,將第i-1個結點的後繼結點置為第i+1個結點,並釋放第i+1個結點的空間。

int delcirlink(linklist l,int i,elemtype x)

if(p->next == l && pos < i-1||pos>i-1)

q = p->next;

*x = q->data;

p->next = q->next;

delete q;

return 1;

}

2.4.2雙向迴圈鍊錶

單項鍊表不便於查詢前驅結點,所以為了方便兩個方向的查詢,可以在結點設兩個指標域,乙個存放前驅結點的位址,另乙個存放直接後繼結點的位址。

資料型別描述

typedef struct dondedonde,*dlinklist;
1.初始化操作

建立乙個帶有頭結點的空鍊錶。

int initdlinklist(dlinklist *l)
2.插入

按後繼方向根據指定位置插入結點。

int insertdlinklist(dlinklist l,int i,elemtype x)

if(p->next == l&&ji-1)

s=(dlinklist)malloc(sizeof(dnode));

s->data = x;

s->pre = p;

s->next = p->next;

p->next->pre = s;

p->next = s;

return 1;

}

3.刪除操作

按後繼方向根據指定位置刪除結點。

int deletedlinklist(dlinklist l,int i,elemtype *x)

if(p->next == l&&j>i-1)

q = p->next;

*x = q->data;

p->next = q->next;

q->next->pre = p;

free(q);

return 1;

}

4.遍歷

指定遍歷方向,顯示所有資料。

void dispdlinklist(dlinklist l,int n)

printf("\n");

} if(2==n)

printf("\n");

}}

2020資料結構 線性表(1)

2.1線性表的定義 線性表是一種簡單的線性結構,具有如下特徵 1 集合中必須存在唯一的乙個第乙個元素。2 集合中必須存在唯一的乙個最後乙個元素。3 除最後乙個元素外均有乙個唯一的直接後繼。4 除第乙個元素外,均有唯一的直接前驅。2.2線性表的儲存結構和基本操作的實現 2.2.1順序儲存 用一組連續的...

2020春資料結構 線性表

include define ll long long define endl n define io ios sync with stdio false cin.tie 0 using namespace std const int maxn 1e3 5 int a maxn typedef st...

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...