一步一步教你從零開始寫C語言鍊錶 構建乙個鍊錶

2022-09-17 12:36:15 字數 1550 閱讀 3234

為什麼要學習鍊錶?

鍊錶主要有以下幾大特性:

1、解決陣列無法儲存多種資料型別的問題。

2、解決陣列中,元素個數無法改變的限制(c99的變長陣列,c++也有變長陣列可以實現)。

3、陣列移動元素的過程中,要對元素進行大範圍的移動,很耗時間,效率也不高。

先來感性的認識一下鍊錶,我們先來認識下簡單的鍊錶:

從這幅圖我們得出以下資訊:

這個簡單鍊錶的構成:

頭指標(header),若干個節點(節點包括了資料域和指標域),最後乙個節點要指向空。

接下來看看鍊錶的資料結構:

struct list_node

;那麼如何來建立乙個鍊錶的乙個節點呢?

我們寫個程式演示一下:

#include

#include

#include

struct list_node

;typedef struct list_node list_single ;

int main(void)

memset(node,0,sizeof(list_single)); //3、清一下

node->data = 100 ; //4、給鍊錶節點的資料賦值

node->next = null ; //5、將鍊錶的指標域指向空

printf("%d\n",node->data);

free(node);

return 0 ;

}那麼,這僅僅只是建立乙個鍊錶中的乙個節點,為了好看,我們把建立節點封裝成函式,以後想建立多少個節點,我們就可以反覆呼叫乙個函式來建立,會很方便:

list_single *create_list_node(int data)

memset(node,0,sizeof(list_single));

node->data = 100 ;

node->next = null ;

return node ;

}接下來在程式上完成的程式:

#include

#include

#include

struct list_node

;typedef struct list_node list_single ;

list_single *create_list_node(int data)

memset(node,0,sizeof(list_single));

node->data = data;

node->next = null ;

return node ;

}int main(void)

執行結果 :

這樣我們就完成乙個鍊錶節點的建立了,那麼它現在的樣子如下圖:

鍊錶的結構裡,資料儲存了100,因為這個鍊錶只有乙個節點,所以它的指標域指向了null。

教你 新手 一步一步開始SEO

如果你從事seo工作已經有段時間了,你可能對如何來優化乙個網頁有種直覺。你可能是同時來做好幾件事,而不是執行一步一步的過程。但是如果你是正在學習seo,或者是試圖去理解seo們是怎麼來做你的網頁的,那就顯得有些難度了,尤其當你第一次接觸這個的時候。這篇文章旨在幫助seo初學者們更多的了解seo的過程...

一步一步教你寫pdf檔案

pdf作為一種跨平台的檔案格式,越來越受到使用者的歡迎。現在除了adobe官方提供的pdflib有很多第三方的庫可以實現pdf的檔案建立 修改 格式轉換。pdf文件採用的是二進位制和文字混排的方式。近期專案需要,對pdf檔案的結構做了一些研究。最終,領導決定採用第三方庫,沒能用得上。在此,跟大家分享...

一步一步教你寫DOTA外掛程式

好久木有研究dota了,整理篇小菜文章。首先,我們要提公升外掛程式本身程式許可權,使其能夠有許可權修改war3遊戲的記憶體。這個c 可以使用如下 void enabledebugpriv 提公升程式自身許可權 tkp.privilegecount 1 tkp.privileges 0 luid se...