目錄
首先,我們再回顧一下線性表的兩種儲存方式——順序儲存與鏈式儲存
上圖左邊為順序儲存,右邊為鏈式儲存
之前我們利用陣列來實現順序表,對於順序表的優點缺點,總結來說就是,查詢方便,增刪複雜。
線性表之順序儲存的優缺點
而鍊錶特點可以說恰恰相反,增刪方便,查詢複雜。
今天實現的是鍊錶中最簡單的一種——單鏈表(每個結點中只含有乙個指標域)
對於鍊錶我們只知道它每個結點的儲存的實體地址是不連續的,但邏輯上還是符合線性表「一對一」的特點。因此,我們就需要用「線」(指標)把這些不連續的結點按順序連線起來。
鍊錶的結點在記憶體中儲存不連續
通過指標把每個結點按順序連起來
到這裡我們可以發現,要想表示鍊錶中的結點,光儲存結點的資料是不夠的,還得有指標。因此,單鏈表的結點結構如下:
資料域儲存資料,指標域儲存指標
//***************=線性表的單鏈表儲存結構***************==
typedef struct lnode lnode;
注意:因為指標是指向每個結點的,也就是指向struct lnode這個自定義的結構體型別,所以指標的型別就是struct lnode*。
單鏈表的初始化其實就是建立幾個結點,然後用指標把他們連線起來。
先建立乙個頭指標,實際上就是建立乙個頭結點,然後頭指標指向頭結點就ok
lnode* createlist_l(int n)
else
} return p;
}單鏈表插資料情況
觀察可知,我們要實現插入操作,需要的操作是一樣的。
s1:將後繼結點的指標賦給新結點的指標域;
s2:將前驅節點的指標域改為指向新結點的指標。
注意:s1和s2不能換順序。
//******************************=演算法2.9*************************=
status listinsert_l(lnode *l, int i, elemtype e) //尋找第i-1個結點
if (!p || j > i - 1)return error;//i小於1或者大於表長時
lnode* s = (lnode*)malloc(sizeof(lnode));//生成新的結點
s->data = e; s->next = p->next;//s1
p->next = s;//s2
return ok;
}單鏈表刪除資料示意圖
觀察可知,只需要將待刪結點的前驅結點的指標域的值換成待刪結點的後繼結點的指標即可。
//********************=演算法2.10******************************==程式設計客棧=
status listdelete_l(lnode *l, int i, elemtype *e)
if (!(p->next) || j > i - 1)return error;//刪除位置不合理
lnode *q = p->next; p->next = q->next;//刪除並釋放結點
*e = q->data; free(q);
return ok;
}三、參考**實現與截圖
#include
#include
#define ok 1
#define error 0
#define overflow -2
#define elemtype char
typedef int status;
//***************=線性表的單鏈表儲存結構***************===
typedef struct lnode lnode;
lnode* createlist_l(int n)
else
} return p;
}//******************************=演算法2.9*************************=
status listinsert_l(lnode *l, int i, elemtype e) //尋找第i-1個結點
if (!p || j > i - 1)return error;//i小於1或者大於表長時
lnode* s = (lnode*)malloc(sizeof(lnode));//生成新的結點
s->data = e; s->next = p->next;
p->next = s;
return ok;
}//********************=演算法2.10******************************===
status listdelete_l(lnode *l, int i, elemtype *e)
if (!(p->next) || j > i - 1)return error;//刪除位置不合理
lnode *q = p->next; p->next = q->next;//刪除並釋放結點
*e = q->data; free(q);
return ok;
}void display(lnode *l)
printf("\n");
}int main()
初始化鍊錶為abcdef,在第2個位置插入y,然後刪除y
c語言實現單鏈表
一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...
C語言實現單鏈表
單鏈表可以說是基礎,有利於對指標的使用 結點 typedef int datatype typedef struct slistnode slistnode 實現的函式的宣告如下 slistnode buynode datatype x void printslist slistnode phead...
C語言實現單鏈表
dev c 編譯執行通過,實現了單鏈表的構建,清空,插入,刪除和查詢。include include include include include define ok 1 define error 0 typedef int elemtype typedef struct node node ty...