用c實現的單向線性鍊錶,支援追加,插入節點,刪除節點,清空,刪除匹配節點,鍊錶反轉,有序插入等操作。分為三個檔案list.h包含鍊錶結構和函式的宣告。list.cpp是各種函式的實現,test.cpp包含測試**。
/*list.h*/
#ifndef _list_h
#define _list_h
#include using namespace std;
typedef struct nodelistnode;
typedef struct listlist;
/*初始化鍊錶*/
void list_init(list * list);
/*釋放鍊錶*/
void list_deinit(list * list);
/*追加元素*/
/*指定位置插入元素*/
void list_insert(list * list,int data,int pos);
/*刪除指定位置的元素*/
void list_remove(list * list,int pos);
/*鍊錶長度*/
size_t list_size(list * list);
/*正向列印鍊錶*/
void list_print(list * list);
/*反向列印鍊錶*/
void list_unprint(list * list);
/*鍊錶反轉*/
void list_reverse(list * list);
/*鍊錶的有序插入*/
void listsort_insert(list * list,int data);
/*將兩個有序鍊錶合併成乙個有序的鍊錶*/
void list_merge(list * list1,list * list2);
/*判斷鍊錶是否回文*/
bool huiwen(listnode * phead);
/*將鍊錶中大於val的節點放在右邊,小於等於的放在左邊*/
listnode* listdivide(listnode* head, int val);
#endif
/*list.cpp*/
#include "list.h"
#include /*建立乙個鍊錶節點*/
static listnode * create_node(listnode * next,int data)
/*刪除鍊錶節點*/
static listnode * delete_node(listnode * node)
/*初始化鍊錶*/
void list_init(list * list)
/*釋放鍊錶*/
void list_deinit(list * list)
}/*追加元素*/
listnode * node = create_node(null,data);
if (list->tail)
list->tail->next = node;
else
list->head = list->tail = node;
list->tail = node;
}/*指定位置插入元素*/
void list_insert(list * list,int data,int pos)
else if (pos == 1)
else
} temp->next = node;
node->next = find; }}
/*刪除指定位置的元素*/
void list_remove(list * list,int pos)
else if (pos == 1)
else
if (pos == 0 && find->next)
if (!find->next && pos > 0)
} }}/*鍊錶長度*/
size_t list_size(list * list)
/*正向列印鍊錶*/
void list_print(list * list)
printf("\n");
}/*反向列印以node為起始節點的鍊錶*/
void print(listnode * node)
}/*反向列印鍊錶*/
void list_unprint(list * list)
/*逆轉以node為起始節點的鍊錶*/
void reverse(listnode * node)
}/*鍊錶反轉*/
void list_reverse(list * list)
/*判斷鍊錶是否回文*/
bool huiwen(listnode * phead)
/*從第temp個節點開始逆轉*/
int temp = size/2 + 1;
int temp1 = temp;
/*找到開始逆轉的節點*/
for (find = phead;find;find=find->next)
}reverse(start);
start->next = null;
temp1--;
for (listnode*first = phead,*end = last;;first=first->next,end=end->next)
return true;
}/*鍊錶的有序插入*/
void listsort_insert(list * list,int data)
else if (node->data >= list->tail->data)
/*一般情況的處理,前面排除了所有情況,即插入節點不可能在最前面,也不可能在最後面,以保證下面的迴圈沒有錯*/
else }}
/*合併以node1和node2為起始節點的鍊錶,並且返回合併後的首節點位址*/
listnode* node_merge(listnode * node1,listnode * node2)
else if (node1->data > node2->data)
return node;
}/*將兩個有序鍊錶合併成乙個有序的鍊錶*/
void list_merge(list * list1,list * list2)
/*將鍊錶中大於val的節點放在右邊,小於等於的放在左邊*/
listnode* listdivide(listnode* head, int val)
if (head->data>val)
head=temp;
}if (less_equ_tail)
less_equ_tail->next=more_head;
return less_equ_head?less_equ_head:more_head;
}
/*test.cpp*/
#include "list.h"
#include #include int main()
線性棧和單向鍊錶的實現
陣列實現 public class stack 自定義線性棧 class mystack 初始化棧建構函式 public mystack int begin 進棧 public void instack int e 元素e進棧,有效長度加1 array size e size 出棧 public i...
線性結構 單向鍊錶
一 介紹 單向鍊錶 單鏈表 是鍊錶的一種,其特點是鍊錶的鏈結方向是單向的,對鍊錶的訪問要通過順序讀取從頭部開始 鍊錶是使用指標進行構造的列表 又稱為結點列表,因為鍊錶是由乙個個結點組裝起來的 其中每個結點都有指標成員變數指向列表中的下乙個結點 二 我們建立節點nodeclass node 為了顯示方...
實現單向鍊錶
鍊錶類 public class link 增加節點 public void add node node else 輸出節點 public void print else 內部搜尋節點的方法 public boolean search string data 直到不存在下乙個節點結束搜尋 if th...