單向線性鍊錶的實現

2021-07-10 05:38:51 字數 3570 閱讀 3308

用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...