LinkedList 鍊錶

2021-07-02 05:02:20 字數 2936 閱讀 5640

線性表是一種簡單的資料結構,其主要特點是元素之間存在「一對一」的關係,除去第乙個元素,每個元素都存在唯一乙個「前驅節點」,除去最後乙個元素都存在唯一乙個「後繼節點」。

簡單的線性表有:陣列單鏈表雙向鍊錶靜態鍊錶等。

順序表(陣列)優缺點

陣列不僅邏輯上,物理上位置也相鄰,可隨機訪問,但刪除或插入元素時需要移動大量元素,而且需要預先分配乙個較大的空間。

鍊錶優缺點

鍊錶不要求物理位置上也相鄰,方便刪除和插入,但沒有隨機訪問的特性。

code:

#include 

#include

typedef

struct node node;

node *create_linked_list(node *head, int data, int size)

return head;

}node *insert_node(node *head, int index, int element)

// 建立乙個新節點

node *new_node = malloc(sizeof(node));

new_node->element = element;

new_node->next = previous_node->next;

// 插入

previous_node->next = new_node;

// 返回

return head;

}node *delete_node(node *head, int index)

// 需要刪除的當前節點

node *cur_node = previous_node->next;

// 將前乙個節點連線到後乙個節點

previous_node->next = cur_node->next;

// 釋放當前節點

free(cur_node);

// 返回

return head;

}void print_linked_list(node *head)

}void main()

output:

建立後的鍊錶:

1 2 4

在位置3處插入3後的鍊錶:

1 2 3 4

將位置2的節點刪除後的鍊錶:

1 3 4

迴圈鍊錶的最後乙個節點的指標域指向頭節點(和head指標指向一致)。它的操作與單鏈表並無太大差別。值得注意的乙個差別是:判斷鍊錶結束,並不是看最後乙個節點的指標域是否等於null,而是看它是否指向頭節點。

code:

#include 

#include

typedef

struct node node;

node *create_double_link_list(node *head, int data, int size)

return head;

}node *insert_node(node *head, int index, int data)

pre_node = cur_node;

old_node = cur_node->next;

// 建立新節點

node *new_node = malloc(sizeof(node));

new_node->data = data;

new_node->previous = pre_node;

new_node->next = old_node;

// 插入

pre_node->next = new_node;

if (old_node != null)

// 返回

return head;

}node *delete_node(node *head, int index)

node *pre_node = cur_node; // 要刪除位置的前乙個節點

node *del_node = cur_node->next; // 要刪除位置的節點

node *next_node = cur_node->next->next; // 要刪除位置的後乙個節點

// 刪除

if (next_node != null) else

free(del_node); // 釋放被刪除節點

// 返回

return head;

}void print_double_link_list(node *head)

/* 逆序列印 */

// 獲得最後乙個節點

printf(" 逆序輸出鍊錶中元素:");

node *last_node;

cur_node = head;

while (cur_node->next != null)

last_node = cur_node;

// 從後往前列印

cur_node = last_node;

while (cur_node->previous != null)

}void main()

output:

建立後的鍊錶:

順序輸出鍊錶中元素:1 2 4 逆序輸出鍊錶中元素:4 2 1

在位置3處插入3後的鍊錶:

順序輸出鍊錶中元素:1 2 3 4 逆序輸出鍊錶中元素:4 3 2 1

將位置2的節點刪除後的鍊錶:

順序輸出鍊錶中元素:1 3 4 逆序輸出鍊錶中元素:4 3 1

LinkedList 鍊錶

最近複習到鍊錶 linkedlist 一般來說共有大概有兩種實現方式 1.陣列實現 和 2.鏈式實現。我僅使用了直接鏈式實現,如下。其他的實現方式,大家不妨自己嘗試下吧。author ace yom peizhen zhang date 2015 8 17 description 鍊錶實現 ifnd...

鍊錶 LinkedList

原文中singlelinklist的remove方法有問題,因為是 node current firstnode.getnext 所以導致鍊錶的第乙個節點刪不掉。修改如下 public class singlelinklist 刪除某個節點 param element return 刪除成功返回tr...

鍊錶(LInked LIst)

今天上午憑藉昨天晚上自己學習的指標,今天學習了鍊錶,發現還是乙個非常有用的資料結構,從此我知道了學習指標的重要性。很多人給我說,指標這個東西其實沒有什麼太大的作用,認為鍊錶其實也可以不用指標寫,雖然 篇幅要大一些,但是要好理解一些,但是其實用指標寫利遠遠大於弊,這裡列出一些我認為是優點的東西。指標變...