線性表4 雙向迴圈鍊錶

2021-10-18 16:37:09 字數 2570 閱讀 5712

測試上一次介紹了單向迴圈鍊錶,這一次介紹雙向迴圈鍊錶。

顧名思義,雙向迴圈鍊錶的結點中有兩個指標域,乙個指向直接後繼,乙個指向直接前驅。

描述:資料域+兩個指標域

typedef

int datatype;

typedef

struct node dlinklist,

*dlinklist_t;

用malloc動態申請空間

dlinklist_t createdlinklist()

//2.賦值:資料無效,兩個指標都指向自己

h->data =-1

; h->prior = h;

h->next = h;

return h;

}

頭插,新結點永遠插入第一項(頭結點不是第一項,頭結點後面才是第一項)

**的書寫順序可以有很多種,只要邏輯通順即可。

int

headinsert

(dlinklist_t h, datatype x)

pnew->data = x;

//2.接入頭結點後面

pnew->prior = h;

pnew->next = h->next;

h->next->prior = pnew;

h->next = pnew;

return0;

}

void

showdlinklist

(dlinklist_t h)

printf

("\n");

}

單鏈表中,取第i個元素必須從頭結點出發尋找。

按位置查詢,查詢第pos項元素,返回其位址

dlinklist_t searchpos

(dlinklist_t h,

int pos)

while

(count < pos)

}return p;

}

要利用上面的查詢函式searchpos()

//3.插入新增結點

pnew->prior = p->prior;

pnew->next = p;

p->prior->next = pnew;

p->prior = pnew;

return0;

}刪除結點

("下標%d = %d\n"

, pos, p->data)

;insertdlinklist

(h,2

,666);

insertdlinklist

(h,2

,777);

insertdlinklist

(h,2

,888);

printf

("insert: ");

showdlinklist

(h);

datatype x;

deletedlinklist

(h,2

,&x)

;deletedlinklist

(h,2

,&x)

;deletedlinklist

(h,2

,&x)

;printf

("delete: ");

showdlinklist

(h);

線性表 雙向迴圈鍊錶

雙向鍊錶 double liked list 就是在單向鍊錶的每個結點中,新增乙個指向前驅結點的指標域。class doublenode 雙向鍊錶迴圈帶頭結點的空鍊錶,如圖 非空的迴圈帶頭結點的雙向鍊錶,如圖 插入操作不複雜,不過順序很重要,不要寫反了。假設儲存元素 e 的結點為 s,要實現將結點 ...

線性表的實現(四)雙向鍊錶

單鏈表的結點都只有乙個指向下乙個結點的指標 單鏈表的資料元素無法直接訪問其前驅元素 逆序訪問單鏈表中的元素是極其耗時的操作!雙向鍊錶的定義 在單鏈表的結點中增加乙個指向其前驅的pre指標 插入操作 刪除操作 雙向鍊錶的新操作 獲取當前游標指向的資料元素 將游標重置指向鍊錶中的第乙個資料元素 將游標移...

線性表(一) 鍊錶之雙向迴圈鍊錶

四 雙向迴圈鍊錶的實現 template class cycdullist cycdullist 獲取鍊錶大小 size t size 判斷鍊錶是否為空 bool empty 獲取頭節點 listnode get head 獲取任意位置節點 listnode get node const int i...