C中內存管理與鏈表設置

在計算機中嘁灯,數據與代碼沒有區(qū)別。

在標準C里靶病,并沒有設置可以動態(tài)添加的數組或者是其他的數據結構会通。但是這門語言還是留了一條后路碼農們,那就是void* malloc(int size);娄周。 通過使用這個函數涕侈, 碼農們終于可以根據需求動態(tài)的改變變量的數量。

C 的內存結構

事先聲明:這次的得到的結論是個人實驗得出的結論煤辨,如有不對請務必糾正裳涛。

計算機架構中,儲存器是一個十分重要的器件众辨。在程序中定義的變量端三,在運行時都會變成在內存中的一個特定區(qū)塊。但是不同的語言會對變量的聲明和儲存有不同的規(guī)定泻轰。

Object  v;
v=new Object();

以上是在Java 中聲明并初始化一個Object型變量的過程技肩。Object v; 這個語句其實是聲明了一個Object型的指針。v=new Object(); 讀取到這個語句時浮声, 系統會在內存中創(chuàng)建一個區(qū)域作為v這個變量的儲存空間虚婿。在C中也有類似的步驟,但是有一點C卻不具備泳挥,那就是動態(tài)生成然痊。所謂動態(tài)生成,是指在程序運行的過程中屉符,生成新的變量剧浸。但是C的初始化卻不具備這個功能,C的所有初始化都是靜態(tài)的矗钟,都是在編譯器里靜態(tài)規(guī)劃好了的唆香。但是當業(yè)務需要的時候,C 卻無法簡單的實現動態(tài)初始化吨艇。所以這需要碼農在過程中自己實現這個過程躬它。在C中,所有的變量所占的內存早已在編譯完成的時候就規(guī)定好了东涡。

typedef struct _sample{
int i;
}sample;

void main(){
      sample array[3];
      for(int i=0;i<3;i++){
            sample newUnit;
            newUnit.i=i;
            array[i]=newUnit;
      }
      for(int i=0;i<3;i++){
            printf("%d\n",array[i].i);
      }
}

      Output:
            0
            1
            2

在這段代碼中冯吓,看似好像有新生成的sample結構體生成,但其實通過計算這段代碼生成的指針數量疮跑,可以發(fā)現數量并沒有增加组贺,這就是為什么C無法簡單的動態(tài)生成變量。

C的鏈表設置

伸出你的手我和你,心連心

在上面的歌詞描述了鏈表的基礎結構祖娘。而鏈表分為很多種失尖,有單向,雙向渐苏,環(huán)形鏈表掀潮,每一種都有實際的用途。


20140222205732187.png

單向鏈表


20140223162747406.png

雙向鏈表
image.png

環(huán)形鏈表

當需要一個可以動態(tài)變更大小和各個元素位置的列表時整以,這種結構顯現其優(yōu)越性胧辽。那么問題來了,應該怎么樣實現的公黑。實現的步驟是這樣的邑商。


image.png

那廢話不多說,上代碼凡蚜。

typedef struct _unit{
      struct _unit* last;
      int data;
      struct _unit* next;
}unit;

void main(){
      unit* head=malloc(sizeof(unit));
      head.last=NULL;
      head.data=0;
      head.next=NULL;
      unit* bufferNode;
      bufferNode=head;
      for(int i=0;i<10;i++){
            unit* node=malloc(sizeof(unit));;
            node.last=bufferNode;
            node.next=bufferNode.next;
            bufferNode.next=node;
            node.next->last=node;
            node.data=i+1;
      }
}

如果有興趣繼續(xù)了解的話人断,可以看看箱子寫的:
如何在沒有Malloc的情況下動態(tài)管理內存
如何在沒有Malloc的情況下動態(tài)管理內存 V2.0

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朝蜘,隨后出現的幾起案子恶迈,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暇仲,死亡現場離奇詭異步做,居然都是意外死亡,警方通過查閱死者的電腦和手機奈附,發(fā)現死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門全度,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斥滤,你說我怎么就攤上這事将鸵。” “怎么了佑颇?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵顶掉,是天一觀的道長。 經常有香客問我挑胸,道長痒筒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任嗜暴,我火速辦了婚禮凸克,結果婚禮上,老公的妹妹穿的比我還像新娘闷沥。我一直安慰自己萎战,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布舆逃。 她就那樣靜靜地躺著蚂维,像睡著了一般。 火紅的嫁衣襯著肌膚如雪路狮。 梳的紋絲不亂的頭發(fā)上虫啥,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音奄妨,去河邊找鬼涂籽。 笑死,一個胖子當著我的面吹牛砸抛,可吹牛的內容都是我干的评雌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼直焙,長吁一口氣:“原來是場噩夢啊……” “哼景东!你這毒婦竟也來了?” 一聲冷哼從身側響起奔誓,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斤吐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體和措,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡庄呈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了臼婆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抒痒。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡幌绍,死狀恐怖颁褂,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情傀广,我是刑警寧澤颁独,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伪冰,受9級特大地震影響誓酒,放射性物質發(fā)生泄漏。R本人自食惡果不足惜贮聂,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一靠柑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吓懈,春花似錦歼冰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甘穿,卻和暖如春腮恩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背温兼。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工秸滴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人募判。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓荡含,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兰伤。 傳聞我的和親對象是個殘疾皇子内颗,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容