最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言靜態(tài)鏈表和動(dòng)態(tài)鏈表

 更新時(shí)間:2016年05月08日 11:25:08   作者:web1013  
靜態(tài)鏈表和動(dòng)態(tài)鏈表是線性表鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的兩種不同的表示方式。靜態(tài)鏈表的初始長(zhǎng)度一般是固定的,在做插入和刪除操作時(shí)不需要移動(dòng)元素,僅需修改指針。動(dòng)態(tài)鏈表是相對(duì)于靜態(tài)鏈表而言的,一般地,在描述線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí)如果沒(méi)有特別說(shuō)明即默認(rèn)描述的是動(dòng)態(tài)鏈表。

1. 靜態(tài)鏈表

  結(jié)構(gòu)體中的成員可以是各種類型的指針變量,當(dāng)一個(gè)結(jié)構(gòu)體中有一個(gè)或多個(gè)成員的基類型是本結(jié)構(gòu)體類型時(shí),則稱這種結(jié)構(gòu)體為“引用自身的結(jié)構(gòu)體”。如:

    struct link
    {
      char ch;
      struct link *p;
    } a;

  p是一個(gè)可以指向 struct link 類型變量的指針成員。因此,a.p = &a 是合法的表達(dá)式,由此構(gòu)成的存儲(chǔ)結(jié)構(gòu)如圖1所示。

圖1 引用自身的結(jié)構(gòu)體

  例1 一個(gè)簡(jiǎn)單的鏈表

#include <stdio.h>

struct node
{
  int data;
  struct node *next;
};
typedef struct node NODETYPE;

int main()
{
  //a是頭結(jié)點(diǎn),b是中間節(jié)點(diǎn),c是尾節(jié)點(diǎn)
  //h是基類型為NODETYPE的指針,指向頭結(jié)點(diǎn)
  //p是基類型為NODETYPE的指針,用于遍歷鏈表
  NODETYPE a, b, c, *h, *p;
  
  //給變量中的data賦值
  a.data = 10;
  b.data = 20;
  c.data = 30;
  
  //將節(jié)點(diǎn)相連
  h = &a;
  a.next = &b;
  b.next = &c;
  c.next = '\0';
  
  //移動(dòng)p,使之依次指向a、b、c,輸出它們data中的值
  p = h;
  while (p)
  {
    printf("%d\t", p->data);
    p = p->next;  //p順序后移
  }
  printf("\n");
  return 0;
}

STRUCT_LIST

STRUCT_LIST

  以上程序中所定義的結(jié)構(gòu)體類型 NODETYPE 共有兩個(gè)成員:成員 data 是整型;成員 next 是指針類型,其基類型是 NODETYPE 類型。

  a、b、c 是 NODETYPE 結(jié)構(gòu)體類型變量,h 和 p 是指向 NODETYPE 結(jié)構(gòu)體類型的指針變量。執(zhí)行程序后,形成如圖2所示的存儲(chǔ)結(jié)構(gòu)體:指針 h 中存放變量 a 的地址,變量 a 的成員 a.next 中存放變量 b 的地址……,最后一個(gè)變量 c 的成員 c.next 置為 '\0'(NULL)。這樣就把同一類型的結(jié)構(gòu)體變量 a、b、c “鏈接”到一起,形成所謂的“鏈表”,變量 a、b、c 稱為鏈表的節(jié)點(diǎn)。

  在此例中,鏈接到一起的每個(gè)節(jié)點(diǎn)(結(jié)構(gòu)體變量 a、b、c)都是通過(guò)定義,由系統(tǒng)在內(nèi)存中開(kāi)辟了固定的、不一定連續(xù)的存儲(chǔ)單元。在程序執(zhí)行過(guò)程中,不可能人為的再產(chǎn)生新的存儲(chǔ)單元,也不能認(rèn)為的使已開(kāi)辟的存儲(chǔ)單元消失。這種鏈表成為“靜態(tài)鏈表”。

圖2 鏈表存儲(chǔ)結(jié)構(gòu)示意圖

2.動(dòng)態(tài)鏈表的概念

  到目前為止,凡是遇到處理“批量”數(shù)據(jù)時(shí),我們都是利用數(shù)組來(lái)存儲(chǔ)。定義數(shù)組必須(顯式的或隱含的)指明元素的個(gè)數(shù),從而也就限定了一個(gè)數(shù)組中存放的數(shù)據(jù)量。在實(shí)際應(yīng)用中,一個(gè)程序在每次運(yùn)行時(shí)要處理的數(shù)據(jù)的數(shù)目通常并不確定。如果數(shù)組定義的小了,就沒(méi)有足夠的空間存放數(shù)據(jù),定義大了又浪費(fèi)存儲(chǔ)空間。

  對(duì)于這種情況,如果能在程序執(zhí)行過(guò)程中,根據(jù)需要隨時(shí)開(kāi)辟存儲(chǔ)空間,不需要時(shí)再隨時(shí)釋放,就能比較合理的使用存儲(chǔ)空間。C 語(yǔ)言的動(dòng)態(tài)存儲(chǔ)分配提供了這種可能性。每次動(dòng)態(tài)分配的存儲(chǔ)單元,其地址不一定是連續(xù)的,而所需處理的批量數(shù)據(jù)往往是一個(gè)整體,各數(shù)據(jù)之間存在著接序關(guān)系。鏈表的每個(gè)節(jié)點(diǎn)中,除了要有存放數(shù)據(jù)本身的數(shù)據(jù)域外,至少還需要有一個(gè)指針域,用它來(lái)存放下一個(gè)節(jié)點(diǎn)元素的地址,以便通過(guò)這些指針把各節(jié)點(diǎn)連接起來(lái)(如圖3)。由于鏈表每個(gè)存儲(chǔ)單元都由動(dòng)態(tài)存儲(chǔ)分配獲得,故稱這樣的鏈表為“動(dòng)態(tài)鏈表”。

  需要強(qiáng)調(diào)的是:動(dòng)態(tài)鏈表中,每個(gè)節(jié)點(diǎn)沒(méi)有自己的名字,只能靠指針維系節(jié)點(diǎn)之間的接序關(guān)系。一旦某個(gè)節(jié)點(diǎn)的指針“斷開(kāi)”,后續(xù)節(jié)點(diǎn)就再也無(wú)法找尋。

圖3 帶有頭結(jié)點(diǎn)的單向鏈表

  每個(gè)鏈表都用一個(gè)“頭指針”變量來(lái)指向鏈表的開(kāi)始,如圖3中的 head。也就是說(shuō),在 head 中存放了鏈表的第一個(gè)節(jié)點(diǎn)的地址。在這個(gè)鏈表中,我們?cè)O(shè)置了一個(gè)“頭結(jié)點(diǎn)”,這個(gè)節(jié)點(diǎn)的數(shù)據(jù)域中不存放數(shù)據(jù)(根據(jù)需要也可以不設(shè)頭結(jié)點(diǎn))。鏈表最后一個(gè)節(jié)點(diǎn)的指針域不存放地址,置為 '\0'(NULL) 值,標(biāo)志著鏈表的結(jié)束。上述鏈表的每個(gè)節(jié)點(diǎn)都只有一個(gè)指針域,每個(gè)指針域存放著下一個(gè)節(jié)點(diǎn)的地址。因此,這種鏈表只能從當(dāng)前節(jié)點(diǎn)找到后繼節(jié)點(diǎn),故稱為“單向鏈表”。

相關(guān)文章

  • C語(yǔ)言中反斜杠的作用及說(shuō)明

    C語(yǔ)言中反斜杠的作用及說(shuō)明

    這篇文章主要介紹了C語(yǔ)言中反斜杠的作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++ pair的用法實(shí)例詳解

    C++ pair的用法實(shí)例詳解

    這篇文章主要介紹了C++ pair的用法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C++ OpenCV實(shí)現(xiàn)像素畫(huà)的示例代碼

    C++ OpenCV實(shí)現(xiàn)像素畫(huà)的示例代碼

    這篇文章主要介紹了通過(guò)OpenCV進(jìn)行圖片像素的變化,從而形成像素畫(huà)效果的功能。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手試一試
    2022-01-01
  • linux中查詢dns示例

    linux中查詢dns示例

    這篇文章主要介紹了linux中查詢dns示例,需要的朋友可以參考下
    2014-04-04
  • c++ 完備的運(yùn)行時(shí)類型信息(動(dòng)態(tài)類型信息)

    c++ 完備的運(yùn)行時(shí)類型信息(動(dòng)態(tài)類型信息)

    這篇文章主要介紹了c++ 完備的運(yùn)行時(shí)類型信息,需要的朋友可以參考下
    2017-07-07
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++實(shí)現(xiàn)簡(jiǎn)易通訊錄

    C++實(shí)現(xiàn)簡(jiǎn)易通訊錄

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)易通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語(yǔ)言編寫(xiě)一個(gè)鏈表

    C語(yǔ)言編寫(xiě)一個(gè)鏈表

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言編寫(xiě)一個(gè)鏈表,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • c++中的指針最全總結(jié)

    c++中的指針最全總結(jié)

    指針是整個(gè)C++的精髓所在,只有精通了指針才可以說(shuō)是掌握了C++,可以說(shuō)學(xué)習(xí)C++的過(guò)程是個(gè)熟練掌握和使用指針的過(guò)程,下面這篇文章主要給大家介紹了關(guān)于c++中指針的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • Windows進(jìn)程崩潰問(wèn)題的定位方法

    Windows進(jìn)程崩潰問(wèn)題的定位方法

    這篇文章主要介紹了Windows進(jìn)程崩潰問(wèn)題的定位方法,本文使用nstd工具進(jìn)行進(jìn)程崩潰時(shí)內(nèi)存和堆棧轉(zhuǎn)儲(chǔ)的方法查明問(wèn)題所在,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

黄梅县| 磴口县| 庆安县| 瓦房店市| 吉安县| 巧家县| 上蔡县| 海兴县| 山阳县| 渑池县| 运城市| 军事| 玉龙| 塔城市| 石河子市| 台南县| 德格县| 西城区| 大余县| 宁阳县| 新兴县| 顺平县| 凤阳县| 贵阳市| 隆安县| 木兰县| 徐闻县| 大厂| 宜昌市| 民丰县| 汽车| 鱼台县| 酒泉市| 星子县| 章丘市| 财经| 龙门县| 宣威市| 梁平县| 永嘉县| 视频|