C 資料結構 線性表之 單 鍊錶

2022-03-11 12:58:05 字數 4515 閱讀 5073

一 (單)鍊錶 adt

+ status initlist(linklist &l)初始化(單)鍊錶

+ void printlist(linklist l)遍歷(單)鍊錶

+ int listlength(linklist l)獲得表長

+ void createlist_head(linklist &l, int n)建立單鏈表 (頭插法)【重點】

+ void createlist_rear(linklist &l, int n)建立單鏈表 (尾插法)【重點】

+ status getelement(linklist l, int i, elementtype &e)(按位)取值

+ lnode *locateelement(linklist l, elementtype e)(按值)查詢

+ status listinsert(linklist &l, int i, elementtype e)(按位)插入 【重點 | 易錯】

+ status listdelete(linklist &l, int i)(按位)刪除  【重點 |易錯/易混】

二 程式設計實現

2.1 定義基礎資料型別

elementtype (資料元素型別/結構體)

struct elementtype 

bool operator!=(const elementtype b) const

};

status (狀態/列舉型別)

enum status ;

lnode(單鏈表結點/結構體) / linklist (單鏈表/結構體)

typedef struct lnode *linklist; // *linklist 本質上等同於 *lnode

2.2 初始化(單)鍊錶

status initlist(linklist &l)

status initlist(linklist &l)

2.3 遍歷(單)鍊錶

void printlist(linklist l)

void printlist(linklist l)

printf("\n");

}

2.4 獲得表長

int listlength(linklist l)

int listlength(linklist l)

return i;

}

2.5-1 建立單鏈表 (頭插法)

void createlist_head(linklist &l, int n)

void createlist_head(linklist &l, int n)

}

2.5-2 建立單鏈表 (尾插法)

void createlist_rear(linklist &l, int n)

void createlist_rear(linklist &l, int n)

}

2.6 (按位)取值

status getelement(linklist l, int i, elementtype &e)

status getelement(linklist l, int i, elementtype &e)

if(j>i || p==null)

e = p->data; // 賦值

return ok;

}

2.7 (按值)查詢

lnode *locateelement(linklist l, elementtype e)

lnode *locateelement(linklist l, elementtype e)

return null;

}

2.8 (按位)插入

status listinsert(linklist &l, int i, elementtype e)

status listinsert(linklist &l, int i, elementtype e)

if(j>i-1 || p == null)

lnode *s = new lnode; // 生成新結點

s->data = e;

s->next = p->next; // 鏈結 新結點 與 原第 i 個結點

p->next = s;

return ok;

}

2.9 (按位)刪除

status listdelete(linklist &l, int i)

status listdelete(linklist &l, int i)

if( j > i-1 || p->next == null )

q = p->next;

p->next = q->next;

delete q; // 釋放被刪除結點的空間

return ok;

}

三 測試執行(main.cpp)

#include //#include #include using namespace std;

#include "base.h"

#include "linklist.h"

int main()

執行結果

length: 0

status (after insert) : 1

[linklist.h#printlist] list->elements: a

status (after insert) : 1

[linklist.h#printlist] list->elements: a b

status (after insert) : 1

[linklist.h#printlist] list->elements: a b c

j:0status (after delete) : 0

[linklist.h#printlist] list->elements: a b c

(old) p->data:

(new) p->data: a

--------------

(old) p->data: a

(new) p->data: b

--------------

(old) p->data: b

(new) p->data: c

--------------

j:3status (after delete) : 0

[linklist.h#printlist] list->elements: a b c

(old) p->data:

(new) p->data: a

--------------

(old) p->data: a

(new) p->data: b

--------------

status (after delete) : 1

[linklist.h#printlist] list->elements: a b

input -> element: a

input -> element: b

input -> element: c

input -> element: d

input -> element: e

[linklist.h#printlist] list->elements: a b c d e

四 參考資料

1 《資料結構(c語言版 第二版)》.嚴蔚敏.李冬梅.吳偉民

資料結構線性表之鍊錶

c 關於鍊錶的操作,包括建立鍊錶 正序和倒序插入 輸出鍊錶內容 插入節點 刪除節點 銷毀等操作 單鏈表基本操作 include include define elemtype int typedef struct nodelnode,linklist linklist link linklist m...

資料結構 線性表 鍊錶

在之前了解完什麼是資料結構之後 資料結構 線性表 順序表 陣列 我們再來看看線性結構另外一種實現方式 鍊錶順序表中的鍊錶沒有物理上的連續儲存要求,只需要在儲存資料時通過 鏈 的方式將資料進行連線,而這個 鏈 的實現就是通過指標來實現的。鍊錶的連續儲存方式 對於抽象資料型別來說,每一種資料結構都有自己...

資料結構之線性表(順序表 鍊錶)

線性表是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。線性表的邏輯結構簡單,便於實現和操作。線性表的特徵 1 線性表是乙個序列 2 n 0時,線性表是乙個空表 3 線性表中的第乙個元素無前驅,最後乙個元素無後繼,其他元素有且只有乙個前驅和後繼。4 線性表是有長度的,其長度就是元素...