資料結構 單鏈表 C語言

2021-07-05 13:37:16 字數 2369 閱讀 4417

單向鍊錶:

鍊錶結點通常包含資料域與指標域,資料域用來儲存相關的使用者的資料,指標域用來指向下乙個結點。訪問單向鍊錶,需要從頭部(head)開始單向順序訪問,訪問終結於指標域(next)為null的結點;其儲存方式不同於以往的陣列,按照非連續位址方式儲存。

優點:鍊錶長度可以實現動態增長,不必像陣列一樣在建立時確定大小。

採取動態記憶體分配,不會造成記憶體浪費。

鍊錶內部結點的插入與刪除方便,只需修改相應的next指標。

在刪除結點時,只需修改前一結點的指標,並釋放本結點,不需要大量移動後面的元素。

實現:結構體:

//結點結構體

#define elemtype int

typedef struct nodenode;

鍊錶初始化:

//初始化頭結點

//return:返回頭結點指標

node *create_list()

head->next = null;

head->value = 0;

return head;

}

增加結點

//尾部增加結點

//@num:增加節點數量

//@head:頭結點的位址

void add_node(int num,node **head)

node *p,*q;//p指向新結點 q指向鍊錶尾部

q = *head;

while(q->next != null)//遍歷鍊錶至尾部,在尾部插入新結點

q = q->next;

while(num--)

p->next = null;

printf("input value:");

scanf("%d",&p->value);

q->next = p;//將新結點連線至鍊錶尾部

q = p;//讓q重新指向鍊錶尾部

}}

遍歷列印

//遍歷列印鍊錶

//@head:頭結點

void print_list(node *head)

node *p = head;

while(p->next)//當p的指標域為null時,此結點為尾結點

}

刪除第n個結點

//刪除第num個結點

//@num:被刪除的結點

//@head:頭結點

void delete_node(int num,node **head)

node *q,*p = *head;

//迴圈中斷條件

//當num == 0終止時,找到結點

//當p->next == null 終止時,鍊錶長度小於或等於num

while(num-- && p->next != null)

q = p;

p = p->next;

}//迴圈正常結束後,執行到此處時,代表找到num結點。

q->next = p->next;

free(p);

p = null;

}

插入結點

//在num處後插入新結點

//@num:搜尋的結點

//@value:新結點的值

//@head:頭結點

void insert_node(int num,int value,node **head)

node *q,*p = *head;

//迴圈中斷條件

//當num == 0終止時,找到結點

//當p->next == null 終止時,鍊錶長度小於或等於num

while(num-- && p->next != null)

p = p->next;

}q = (node *)malloc(sizeof(node));

q->value = value;

q->next = p->next;

p->next = q;

}

銷毀鍊錶

//銷毀鍊錶

//@head:頭結點的指標

void destroy_list(node **head)

node *q =

*head;

node *p =

*head;

//遍歷刪除頭結點以外的結點

while(p->next)

free(p);//刪除頭結點

p =null;

q =null;

*head =

null;

}

c語言 資料結構 單鏈表

將線性表l a0,a1,an 1 中各元素分布在儲存器的不同儲存塊,稱為結點,通過位址或指標建立它們之間的聯絡,所得到的儲存結構為鍊錶結構,表中 ai的結點形式如圖表示 其中結點的data 域存放資料元素 ai,而 next 域是乙個指標,指向 ai的直接後繼 ai 1 所在的結點。單鏈表結構如下 ...

C語言資料結構 單鏈表

單鏈表在資料結構裡十分常見,是一種常見的線性表,下面介紹其性質並用 實現相關功能 單鏈表以鏈結方式儲存資料 1 鍊錶的具體儲存表示為 用一組任意的儲存單元來存放線性表的結點 這組儲存單元既可以是連續的,也可以是不連續的 鍊錶中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關係,在儲存...

C語言資料結構(單鏈表)

單鏈表的整表建立 對於順序儲存結構的線性表的整表建立,我們可以用陣列的初始化來直觀理解。而單鏈表和順序儲存結構就不一樣了,它不像順序儲存結構這麼集中,他的資料可以是分散在記憶體各個角落的,他的增長也是動態的。對於每個單鏈表來說,他所占用空間的大小和位置是不需要預先分配劃定的,可以根據系統的情況和實際...