說明1:以下**在vs2017中編譯通過,讀者使用時可以直接將標頭檔案(dulinklist.h),原始檔(dulinklist.c),主檔案(main.c)中的內容直接拷貝過去,即可編譯執行!
說明2:圖示
**標頭檔案:dulinklist.h(函式的宣告)
#ifndef _dulinklist_h_
#define _dulinklist_h_
#include
#include
#include
#include
#define elemtype int
typedef
struct dulistnode
dulistnode,
*pdulistnode;
typedef
struct dulinklist
dulinklist;
//void
initlist
(dulinklist* list)
;dulistnode*
createnode
(elemtype data)
;void
push_back
(dulinklist* list, elemtype data)
;void
push_front
(dulinklist* list, elemtype data)
;void
showlist
(dulinklist* list)
;void
pop_back
(dulinklist* list)
;void
pop_front
(dulinklist* list)
;bool empty
(dulinklist* list)
;void
insert_by_value
(dulinklist* list, elemtype data)
;pdulistnode find_data
(dulinklist* list, elemtype key)
;int
length
(dulinklist* list)
;void
delete_by_value
(dulinklist* list, elemtype key)
;void
sort
(dulinklist* list)
;void
reverse
(dulinklist* list)
;//資料反轉
void
clear
(dulinklist* list)
;void
destory
(dulinklist* list)
;pdulistnode prior
(dulinklist* list, elemtype posdata)
;//求posdata結點的前驅
pdulistnode next
(dulinklist* list, elemtype posdata)
;//求posdata結點的後繼
#endif
原始檔:dulinklist.c(函式的定義)**
#include
"dulinklist.h"
void
initlist
(dulinklist * list)
dulistnode *
createnode
(elemtype data)
void
push_back
(dulinklist * list, elemtype data)
void
push_front
(dulinklist * list, elemtype data)
else
list->size++;}
void
showlist
(dulinklist * list)
printf
(".nul\n");
}void
pop_back
(dulinklist * list)
void
pop_front
(dulinklist * list)
else
list->size--;}
bool empty
(dulinklist * list)
void
insert_by_value
(dulinklist * list, elemtype data)
}pdulistnode find_data
(dulinklist * list, elemtype key)
intlength
(dulinklist * list)
void
delete_by_value
(dulinklist * list, elemtype key)
if(pfind == list->tail)
pop_back
(list)
;else
}void
sort
(dulinklist * list)
else}}
void
reverse
(dulinklist * list)
}void
clear
(dulinklist * list)
else
free
(pmove)
; pmove = list->head->next;
} list->size =0;
}void
destory
(dulinklist * list)
pdulistnode prior
(dulinklist * list, elemtype posdata)
return pmove;
}pdulistnode next
(dulinklist * list, elemtype posdata)
主檔案:main.c(測試檔案)
#include
"dulinklist.h"
intmain()
鍊錶與雙向鍊錶
鍊錶與雙向鍊錶 一 特點 1 陣列列表 缺點 新增很慢 優點 查詢快 元素是整塊出現的 大小是可變的 可以刪除 2 鍊錶 優點 新增很快 刪除 缺點 查詢慢 元素是零散出現的陣列列表 鍊錶是乙個乙個的結點相連線,需要定義結點,是鏈式的資料結構。二 鍊錶實現 1 定義乙個結點 public class...
雙向鍊錶實現
template class link link link pre null,link ne null void operator new size t void operator delete void ptr template link link freelist null template v...
雙向鍊錶實現
雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...