結構體鍊錶小結

2021-07-23 08:37:30 字數 1897 閱讀 8135

引用自身的結構體,乙個結構體中有乙個或多個成員的基型別就是本結構體型別時,說明這個結構體可以引用自己,所以稱作引用自身的結構體。

例如下面的結構體:

struct link a;
p是乙個可以指向struct link型別變數的指標成員,這樣,a.p=&a就是合法的表示式。那麼,這有什麼意義呢?

這樣的意義就是我們可以把分散儲存的資料項,用乙個結構體成員鏈結起來(當然這也耗費了那個儲存指標的記憶體空間)看下面的程式

#include struct

node;

main()

printf("\n

");}

這樣的相鏈的資料儲存形式稱為鍊錶!上面形成鍊錶的方法是人為定義的,在程式執行過程中,不會生成新的儲存單元,所以也稱為「靜態鍊錶」

下面看一種更方法使用的「動態鍊錶」

前面的日誌中提到了c語言動態儲存分配提供了「按需分配記憶體」的實現方法,有乙個問題是,如果多次動態分配儲存單元,各儲存單元的位址不是一定是連續的,而所需要處理的批量資料往往是乙個整體,各資料之間存在著順序關係,這樣,我們可以利用上面的鍊錶把動態得到的儲存單元在邏輯上(而不是在物理上)連線起來,就可以實現我們需要的順序關係了。這時,是把鍊錶技術與動態儲存分配結合了起來,所以這裡我們給了鍊錶乙個新的名詞叫做「動態鍊錶」

很自然,我們上面例子中的鍊錶只有乙個指向後面資料項的指標,如果有兩個呢?乙個指後,乙個指前,這樣就會出現「雙向鍊錶」與「單向鍊錶」的區別

下面我們主要看單向鍊錶

事實上,單身鍊錶中的每個儲存單元的資料(也就是結構體)的格式型別是相同的(包括資料成員和指標成員)

如下:

struct abc;
與單向鍊錶有關的演算法有以下幾類:

建立鍊錶  輸出結點資料   插入結點資料 刪除結點資料

下面這個程式是示例

#include #include 

struct slist;

typedef

struct

slist slist;

slist *creat_slist()

r->next='\0'

; /*退出迴圈後,r指向最後乙個結點,而這個最後結點的成員next要指向'\0'

*/returnh;

/*返回動態鍊錶的頭結點指標*/}

void print_slist(slist *head)while(p!='\0'

); printf(

"->end\n");

} }slist *insert_snode(slist *head,int x,int

y) s->next=p;

/*在p指向的結點前面插入,所以新的結點的next指向p

*/q->next=s;

/*q-next本指向p結點,現在令其指向s結點,實現了插入

*/return head;/*

頭指標並未變化,返回即可*/}

slist *insert_bnode(slist *head,int x,int

y) s->next=p->next;

/*在p指向的結點後面插入,所以新的結點的next指向p

*/p->next=s;

/*p-next本指向p後面的結點,現在令其指向s結點,實現了後插入

*/return head;/*

頭指標並未變化,返回即可*/}

slist *del_node(slist *head,int

x) q->next=p->next;

/*把q->next置成p->next,

*/free

(p);

/*釋放p的儲存空間,實現刪除

*/return

head;

/*頭指標並未變化,返回即可*/}

main()

結構體和鍊錶

1 簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列...

結構體小結

11.26 1.struct 結構體名 結構體成員 最後的 不能省!也可指定乙個無名的結構體型別,他不出現結構體名。2.結構體變數的初始化和引用。struct 結構體名 結構體成員 成員 也可成員.成員列表 3.只能對最低一級的成員進行賦值運算。struct studentstu struct bi...

C語言 鍊錶 結構體

目的 1.編寫手機 薄管理程式,用結構體實現下列功能 1 手機 薄含有姓名 宅電 手機3項內容,建立含有上述資訊的 簿。2 輸入姓名,查詢此人的號碼。3 插入某人的號碼。4 輸入姓名,刪除某人的號碼。5 將以上功能分別用子函式實現,編寫主函式,可以根據使用者的需要,呼叫相應的子函式。建議用結構體和鍊...