日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

动态链表与静态链表

發(fā)布時(shí)間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态链表与静态链表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.



一.??靜態(tài)鏈表

在某些語(yǔ)言中指針是不被支持的,只能使用數(shù)組來(lái)模擬線性鏈表的結(jié)構(gòu).在數(shù)組中每個(gè)元素不但保存了當(dāng)前元素的值,還保存了一個(gè)”偽指針域”,一般是int類型,用于指向下一個(gè)元素的內(nèi)存地址.

  • #define?MAXSIZE?100;????
  • typedef?struct{? ??
  • ??ElemType?data;? ??
  • ??int?cur;? ??
  • }component,SLinkList[MAXSIZE]; ??
  • [cpp]?view plain?copy
  • #define?MAXSIZE?100;???
  • typedef?struct{???
  • ??ElemType?data;???
  • ??int?cur;???
  • }component,SLinkList[MAXSIZE];??


  • 這種鏈表在初始時(shí)必須分配足夠的空間, 也就是空間大小是靜態(tài)的, 在進(jìn)行插入和刪除時(shí)則不需要移動(dòng)元素, 修改指針域即可,所以仍然具有鏈表的主要優(yōu)點(diǎn)(快速插入和刪除).

    二.動(dòng)態(tài)鏈表
    ??
    如果程序支持指針,則可按照我們的一般形式實(shí)現(xiàn)鏈表, 需要時(shí)分配,不需要時(shí)回收即可.

  • typedef?struct??node{ ??
  • ?EleType?data; ??
  • ?struct?node?*?pNext; ??
  • }Node; ??
  • ??
  • ----------------------------------------------------------------------------------------------------------------------------------------------

    有些高級(jí)語(yǔ)言中沒(méi)有“指針”數(shù)據(jù)類型,只能用數(shù)組來(lái)模擬線性鏈表的結(jié)構(gòu),
    數(shù)組元素中的指針“域”存放的不是元素在內(nèi)存中的真實(shí)地址,而是在數(shù)組中的位置。這樣的鏈表
    稱為靜態(tài)鏈表。

    靜態(tài)鏈表:把線性表的元素存放在數(shù)組的單元中(不一定按邏輯順序連續(xù)存放),每個(gè)單元不僅存放元素本身 ,而且還要存放其后繼元素所在的數(shù)組單元的下標(biāo)(游標(biāo))。

    線性表的靜態(tài)單鏈表存儲(chǔ)結(jié)構(gòu)?:

    #define MAXSIZE 100;

    typedef struct{

    ??ElemType data;

    ??int cur;

    }component,SLinkList[MAXSIZE];

    分析?:

    這種描述方法便于在不設(shè)??指針??類型的高級(jí)程序設(shè)計(jì)語(yǔ)言中?,?使用的鏈表結(jié)構(gòu)?.?數(shù)組的零分量可看成頭節(jié)點(diǎn)?.?這種結(jié)構(gòu)仍然需要預(yù)先分配一個(gè)較大的空間?.?但在插入和刪除的時(shí)候?,?不需要移動(dòng)元素?.?僅需要修改指針?.?所以仍然具有鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的主要優(yōu)點(diǎn)?.

    鏈表結(jié)構(gòu)可以是動(dòng)態(tài)地分配存儲(chǔ)的,即在需要時(shí)才開辟結(jié)點(diǎn)的存儲(chǔ)空間,實(shí)現(xiàn)動(dòng)態(tài)鏈接。怎樣開辟存貯空間呢?C語(yǔ)言的庫(kù)函數(shù)提供了以下幾個(gè)函數(shù)。

    1.malloc 函數(shù)

    該函數(shù)如果成功調(diào)用,可以在內(nèi)存中開辟size指定大小的連續(xù)空間。返回值類型為void,請(qǐng)注意這不是表示沒(méi)有返回值,而是表示返回值可以指向任何類型。該函數(shù)是一個(gè)返回指針值的函數(shù),如果成功調(diào)用,返回所開辟空間的首地址,如果失敗返回NULL。該函數(shù)的參數(shù)可以用unsigned int size定義空間大小,也可以用變量類型名作參數(shù)來(lái)定義空間大小。

    如:malloc(sizeof(int));開辟2個(gè)字節(jié)的存儲(chǔ)空間,molloc(sizeof(struct student));開辟10個(gè)(4+4+2)字節(jié)。該函數(shù)返回值是void類型,因此調(diào)用時(shí)需要強(qiáng)制轉(zhuǎn)換成需要的類型。

    如:(int *)malloc(sizeof(int));

    (struct people *)malloc(sizeof(struct student));

    2. free 函數(shù)

    其作用是釋放由p指向的內(nèi)存區(qū),即將這部分內(nèi)存還給系統(tǒng)。我們要注意動(dòng)態(tài)開辟的內(nèi)存在不用之后應(yīng)及時(shí)還給系統(tǒng),以免造成內(nèi)存“遺漏”。free函數(shù)無(wú)返回值。

    這里要說(shuō)明的是,這種能動(dòng)態(tài)開辟存貯空間的區(qū)域是內(nèi)存的堆棧區(qū)。

    實(shí)際上只有建立動(dòng)態(tài)鏈表才是有意義的。

    總結(jié)

    以上是生活随笔為你收集整理的动态链表与静态链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。