複習之資料結構 帶頭結點的迴圈單鏈表

2021-10-20 08:35:33 字數 3060 閱讀 1647

前面複習了單鏈表,單鏈表的尾結點的特點是next域為null(空);而我們今天要複習的迴圈單鏈表,和單鏈表基本類似。

區別就在於:

迴圈單鏈表的尾結點的next域為頭結點。

老規矩,先上頭檔案:

筆者這裡的命名為:clist.h

#pragma once

// 帶頭結點的迴圈單鏈表

// 尾結點的next指向頭結點

typedef

struct cnode

cnode,

* clist;

// 初始化函式

void

initlist

(clist plist)

;// 判空

bool isempty

(clist plist)

;// 獲取資料長度

intgetlength

(clist plist)

;// 頭插

bool insert_head

(clist plist,

int val)

;// 尾插

bool insert_tail

(clist plist,

int val)

;// 在plist中查詢關鍵字key,找到返回目標位址,失敗返回null

clist search

(clist plist,

int key)

;// 刪除plist中的第乙個key

bool deleteval

(clist plist,

int key)

;// 列印輸出所有資料

void

show

(clist plist)

;// 逆置(重中之重)

void

reverse

(clist plist)

;// 清空資料

void

clear

(clist plist)

;// 銷毀動態記憶體

void

destroy

(clist plist)

;

接下來是**檔案,命名為clist.cpp

#include

#include

#include

#include

"clist.h"

// 初始化函式

void

initlist

(clist plist)

// 判空

bool isempty

(clist plist)

// 獲取資料長度

intgetlength

(clist plist)

return count;

}// 頭插

bool insert_head

(clist plist,

int val)

// 尾插

bool insert_tail

(clist plist,

int val)

//p->next = q->next;與下方語句等價

p->next = plist;

q->next = p;

return true;

}// 在plist中查詢關鍵字key,找到返回目標位址,失敗返回null

clist search

(clist plist,

int key)

}return

null;}

// 查詢key的前驅結點,成功返回key的前驅,失敗返回null

static cnode*

searchprio

(clist plist,

int key)

}return

null;}

// 刪除plist中的第乙個key

bool deleteval

(clist plist,

int key)

else

}// 列印輸出所有資料

void

show

(clist plist)

printf

("\n");

}// 逆置(重中之重)

void

reverse

(clist plist)

}// 清空資料

void

clear

(clist plist)

// 銷毀動態記憶體

void

destroy

(clist plist)

}

如下**簡單測試一下我們寫的函式:

#include

#include

#include

"clist.h"

intmain()

show

(&head)

;printf

("逆置後:\n");

reverse

(&head)

;show

(&head)

;printf

("目前鍊錶長度:%d\n"

,getlength

(&head));

printf

("刪除第乙個\"0\"後\n");

deleteval

(&head,0)

;show

(&head)

;printf

("目前鍊錶長度:%d\n"

,getlength

(&head));

destroy

(&head)

;return0;

}

輸出結果如下:

嚴蔚敏. 資料結構(c語言版). 北京:清華大學出版社,2009:30.

資料結構 帶頭結點的單鏈表

比較坑爹的基礎啊,大把時間浪費在建構函式上,建構函式 出生決定命運!自己解決的bug,感覺還不錯。其實程式的核心是演算法,演算法建立在資料結構的基礎之上。大部分的程式設計師現在學的基本都是規則,而不是創造。但掌握了規則,也能創造很多財富。重新鞏固我弱爆了的資料結構,沒敲完資料結構的程式設計師不是好領...

複習之資料結構 帶頭結點的雙向鍊錶

我們會發現,單鏈表由於只有next域,所以,如果想要訪問某個元素的前驅結點,那麼只能從頭開始遍歷到該元素的前乙個元素。效率非常的低下。於是,為了方便的訪問前驅 後繼,雙向鍊錶應運而生。如上圖所示,就是乙個簡單的雙向煉表示意圖。雙向鍊錶共含有三個元素 1 存放資料 2 後繼指標域 3 前驅指標域。雙向...

資料結構 單鏈表 帶頭結點和不帶頭結點

1 單鏈表 通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢 2 只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插 4 5 6 單鏈表的結構定義 7 typedef int datatype 8 typedef struct node 9 linknode...