為什麼要學習鍊錶?
鍊錶主要有以下幾大特性:
1、解決陣列無法儲存多種資料型別的問題。
2、解決陣列中,元素個數無法改變的限制(c99的變長陣列,c++也有變長陣列可以實現)。
3、陣列移動元素的過程中,要對元素進行大範圍的移動,很耗時間,效率也不高。
先來感性的認識一下鍊錶,我們先來認識下簡單的鍊錶:
從這幅圖我們得出以下資訊:
這個簡單鍊錶的構成:
頭指標(header),若干個節點(節點包括了資料域和指標域),最後乙個節點要指向空。
接下來看看鍊錶的資料結構:
[cpp]
view plain
copy
struct
list_node
; 那麼如何來建立乙個鍊錶的乙個節點呢?
我們寫個程式演示一下:
[cpp]
view plain
copy
#include
#include
#include
struct
list_node
; typedef
struct
list_node list_single ;
intmain(
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 ;
} 那麼,這僅僅只是建立乙個鍊錶中的乙個節點,為了好看,我們把建立節點封裝成函式,以後想建立多少個節點,我們就可以反覆呼叫乙個函式來建立,會很方便:
[cpp]
view plain
copy
list_single *create_list_node(
intdata)
memset(node,0,sizeof
(list_single));
node->data = 100 ;
node->next = null ;
return
node ;
} 接下來在程式上完成的程式:
[cpp]
view plain
copy
#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 = 100 ;
node->next = null ;
return
node ;
} int
main(
void
)
執行結果 :
這樣我們就完成乙個鍊錶節點的建立了,那麼它現在的樣子如下圖:
鍊錶的結構裡,資料儲存了100,因為這個鍊錶只有乙個節點,所以它的指標域指向了null。
資料結構 表之煉表
頭插法建立 尾插法建立 顯示 銷毀 include include using namespace std typedef int elemtype typedef struct lnode linklist void createlinklistf linklist l,elemtype a,in...
資料結構之鍊錶
頭結點 第乙個有效結點之前的那個結點 頭結點並不存有效資料 加頭結點的目的主要是為了方便對鍊錶的操作 頭指標 指向頭結點的指標變數 尾指標 指向尾節點的指標變數 如果希望通過乙個函式對鍊錶進行處理,只需要乙個引數 頭指標 首先要定義乙個單鏈表儲存結構 然後建立乙個空表,即初始化,我寫的這個提前設定好...
資料結構之鍊錶
鍊錶是一種基本的資料結構型別,它由乙個個結點組成。每乙個結點包括乙個資料的儲存和乙個指向下乙個結點的引用。在這個定義中,結點是乙個可能含有任意型別資料的抽象實體,它所包含的指向結點的應用顯示了它在構造鍊錶之中的作用。和遞迴程式一樣,遞迴資料結構的概念一開始也令人費解,但其實它的簡潔性賦予了它巨大的價...