一 (單)鍊錶 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 elementtypebool 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: 0status (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 線性表是有長度的,其長度就是元素...