有了動態記憶體分配的基礎,要實現鍊錶就不難了。
所謂鍊錶,就是用一組任意的儲存單元儲存線性表元素的一種資料結構。鍊錶又分為單鏈表、雙向鍊錶和迴圈鍊錶等。我們先講講單鏈表。所謂單鏈表,是指資料接點是單向排列的。乙個單鏈表結點,其結構型別分為兩部分:
1、資料域:用來儲存本身資料
2、鏈域或稱為指標域:用來儲存下乙個結點位址或者說指向其直接後繼的指標。
例:typedef struct node
stud;
這樣就定義了乙個單鏈表的結構,其中char name[20]是乙個用來儲存姓名的字元型陣列,指標*link是乙個用來儲存其直接後繼的指標。
定義好了鍊錶的結構之後,只要在程式執行的時候愛資料域中儲存適當的資料,如有後繼結點,則把鏈域指向其直接後繼,若沒有,則置為null。
下面就來看乙個建立帶表頭(若未說明,以下所指鍊錶均帶表頭)的單鏈表的完整程式。
#include <stdio.h>
#include <malloc.h> /*包含動態記憶體分配函式的標頭檔案*/
#define n 10 /*n為人數*/
typedef struct node
stud;
stud * creat(int n) /*建立單鏈表的函式,形參n為人數*/
h->name[0]='\0'; /*把表頭結點的資料域置空*/
h->link=null; /*把表頭結點的鏈域置空*/
p=h; /*p指向表頭結點*/
for(i=0;i<n;i++)
p->link=s; /*把s的位址賦給p所指向的結點的鏈域,這樣就把p和s所指向的結點連線起來了*/
printf("請輸入第%d個人的姓名",i+1);
scanf("%s",s->name); /*在當前結點s的資料域中儲存姓名*/
s->link=null;
p=s;
}return(h);
}main()
這樣就寫好了乙個可以建立包含n個人姓名的單鏈表了。寫動態記憶體分配的程式應注意,請盡量對分配是否成功進行檢測
單鏈表操作之鍊錶插入 C語言實現
今天回顧了一下單鏈表,寫了乙個簡單的單鏈表插入程式,使用的是頭插法,以前學習的不太好,現在來看又有了收穫,說明自己的基礎還不行。現在貼出 希望大家多看看 裡面的注釋,提出不同的看法或者糾正在下的錯誤。鍊錶結點 typedef struct node ptrtonode void insrtnode ...
C語言實現的單鏈表
鍊錶是一種線性表,但是並不是順序儲存,而是每個節點裡面儲存著下乙個節點的指標,把儲存資料元素的資料串鏈起來。單鏈表的基本實現 typedef int datatype 定義單鏈表 typedef struct listnode listnode 初始化 void initlist listnode ...
c語言實現單鏈表
一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...