線性表是一種簡單的資料結構,其主要特點是元素之間存在「一對一」的關係,除去第乙個元素,每個元素都存在唯一乙個「前驅節點」,除去最後乙個元素都存在唯一乙個「後繼節點」。
簡單的線性表有:陣列、單鏈表、雙向鍊錶、靜態鍊錶等。
順序表(陣列)優缺點:
陣列不僅邏輯上,物理上位置也相鄰,可隨機訪問,但刪除或插入元素時需要移動大量元素,而且需要預先分配乙個較大的空間。
鍊錶優缺點:
鍊錶不要求物理位置上也相鄰,方便刪除和插入,但沒有隨機訪問的特性。
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)
今天上午憑藉昨天晚上自己學習的指標,今天學習了鍊錶,發現還是乙個非常有用的資料結構,從此我知道了學習指標的重要性。很多人給我說,指標這個東西其實沒有什麼太大的作用,認為鍊錶其實也可以不用指標寫,雖然 篇幅要大一些,但是要好理解一些,但是其實用指標寫利遠遠大於弊,這裡列出一些我認為是優點的東西。指標變...