鍊錶 一 單鏈表

2022-02-03 04:10:08 字數 3655 閱讀 3297

單鏈表

1.概念

為了表示每個資料元素a(i)與它下乙個元素a(i+1)之間的邏輯關係,對資料元素a(i)來說除了儲儲存本身的資訊之外,還需儲存乙個表示它下乙個元素的資訊。這兩部分資訊組成資料元素a(i)的儲存映像,稱為節點,它包括兩個域:存本身資訊的叫資料域,存直接後繼位置的叫指標域。n個節點鏈結成乙個鍊錶,即為線性表(a1,a2,a3.....an)的鏈式儲存結構。由於每個節點中只存在乙個指標域所以我們稱之為單鏈表或線性鍊錶。

2.特點

1)順序訪問

2)儲存資料元素的儲存單元可連續可不連續。

3.補充

根據鍊錶節點所含指標個數、指標指向和指標鏈結方式,可將鍊錶分為單鏈表、迴圈鍊錶、雙向鍊錶、二叉鍊錶十字鍊錶鄰接表鄰接多重表等。其中單鏈表、迴圈鍊錶、和雙向鍊錶用於實現線性表的鏈式儲存結構,其他形式多用於實現等非線性結構。

例項4.單鏈表的儲存結構

typtypedef struct

book;

typedef struct lnode

lnode,*linklist; //linklist為指向結構體lnode的指標型別

注:

1)lnode *linklist等價。

2)lnode *強調定義鍊錶中的某個節點,如lnode *pp代表指向某個節點的指標。

3)linklist強調定義鍊錶指向頭結點的頭指標,如linklist ll代表頭指標簡稱表l。

5.幾個概念區分

首元結點:指向鍊錶中儲存第乙個資料元素a1的節點。

頭結點:為處理方便在單鏈表第乙個節點之前附設的乙個節點,他的資料域可以為空。

頭指標:指向鍊錶中第乙個節點的指標。有頭結點則指向頭結點,無頭結點則指向首元結點。

例項6-1.簡單鍊錶

#include #include #define ok 1

#define error 0

using namespace std;

typedef struct nodenode,*lnode;

void init(lnode &l)

void add(lnode &l,lnode &r,int d)

void display(lnode l)

}void newlist(lnode &l,lnode &r)

}int main()

6-2.簡單圖書管理系統

#include #include #define ok 1

#define error 0

using namespace std;

//資料元素

typedef struct

book;

//節點

typedef struct lnode

lnode,*linklist; //linklist為指向結構體lnode的指標型別

//單鏈表初始化

int initlist(linklist &l)

//取值

int getbook(linklist l,int i,book &b)

if(!p||j>i)//該節點不存在或i值不合法

b=p->data;

return ok;

}void out_book(book b);

//查詢

lnode *locatebook(linklist l,book b)

return p; //p為b的位址,查詢失敗p為null

}//插入

int listinsert(linklist &l,int i,book b)

if(!p||j>i-1) //i>l.length,或i<1

lnode *s=null; //構造新節點s

s->data = b;

s->next = p->next;

p->next = s;

return ok;

}//刪除

int listdelete(linklist &l,int i)

if(!(p->next)||(j>i-1))

lnode *t;

t = p->next;

p->next = t->next;

delete t;

return ok;

}//新增節點(後插法)

int addnode(linklist &l,linklist &r,book b)

void in_book(book &t)

void out_book(book b)

return;

}//建立單鏈表(後插法)

void createlist(linklist &l,linklist &r)

}//刪

void del_book(linklist &l)

//查void search_book(linklist &l)

//改void edi_book(linklist &l)

void get_book(linklist &l)

int main()

7-1.執行結果

7-2.執行結果

此處按序號取第5個資料,即isbn為6的資料

8.附:前插法

//建立單鏈表(前插法)

int createlist(linklist &l,book b)

鍊錶(一) 單鏈表1

在使用順序結構儲存資料時,經常會有類似空間不足導致資料溢位,空間過大帶來記憶體浪費等情況。最常見的應該就是我們的陣列這種順序儲存結構。c語言中,有沒有辦法解決這個問題呢?答案是有的,可以用鍊錶這種資料結構來解決動態擴容的問題。使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利...

單鏈表 鍊錶倒置

鍊錶屬於動態資料結構,可以模擬成一 環 接一 環 的鏈條,這裡每一 環 視作乙個結點,結點串在一起形成鍊錶。這種資料結構非常靈活,結點數目無須事先指定,可以臨時生成。每個結點有自己的儲存空間,結點間的儲存空間也無需連線,結點之間的串連由指標來完成,指標的操作又極為靈活方便,無須移動大批資料,只需修改...

鍊錶之單鏈表

上週給前端的小夥伴們進行了講課,想著總結一下,但是直到推到現在,我才開始。上週講課的內容是es6和鍊錶。我大致把鍊錶的內容總結一下,也算是個回顧。一 初始鍊錶 鍊錶定義 使用一組任意的儲存單元儲存線性表的資料元素 可連續,也可是不連續 它是一種順序儲存。也就是說,鍊錶是線性結構,各個元素的儲存位置都...