標頭檔案
#pragma once
#include
#include
typedef
int ltdatatype;
typedef
struct listnode
listnode;
// 建立返回鍊錶的頭結點.
listnode*
listcreate()
;// 雙向鍊錶銷毀
void
listdestory
(listnode* plist)
;// 雙向鍊錶列印
void
listprint
(listnode* plist)
;// 雙向鍊錶尾插
void
listpushback
(listnode* plist, ltdatatype x)
;// 雙向鍊錶尾刪
void
listpopback
(listnode* plist)
;// 雙向煉表頭插
void
listpushfront
(listnode* plist, ltdatatype x)
;// 雙向煉表頭刪
void
listpopfront
(listnode* plist)
;// 雙向鍊錶查詢
listnode*
listfind
(listnode* plist, ltdatatype x)
;// 雙向鍊錶在pos的前面進行插入
void
listinsert
(listnode* pos, ltdatatype x)
;// 雙向鍊錶刪除pos位置的節點
void
listerase
(listnode* pos)
;listnode*
check
(ltdatatype x)
;
主檔案#define _crt_secure_no_warnings 1
#include
"list.h"
// 建立返回鍊錶的頭結點.
listnode*
listcreate()
// 雙向鍊錶銷毀
void
listdestory
(listnode* plist)
plist =
null;}
// 雙向鍊錶列印
void
listprint
(listnode* plist)
printf
("null");
}listnode*
check
(ltdatatype x)
// 雙向鍊錶尾插
void
listpushback
(listnode* plist, ltdatatype x)
// 雙向鍊錶尾刪
void
listpopback
(listnode* plist)
// 雙向煉表頭插
void
listpushfront
(listnode* plist, ltdatatype x)
// 雙向煉表頭刪
void
listpopfront
(listnode* plist)
// 雙向鍊錶查詢
listnode*
listfind
(listnode* plist, ltdatatype x)
plist = plist->next;
}return
null;}
// 雙向鍊錶在pos的前面進行插入
void
listinsert
(listnode* pos, ltdatatype x)
// 雙向鍊錶刪除pos位置的節點
void
listerase
(listnode* pos)
測試檔案#define _crt_secure_no_warnings 1
#include
"list.h"
intmain()
雙向鍊錶實現
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...
雙向鍊錶實現
雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...
實現雙向鍊錶
雙向鍊錶和單向鍊錶相比更加靈活,它的每乙個元素除了本身的值以為擁有兩個指標,分別指向上乙個和下乙個節點。維護成本上要高於單向鍊錶。鍊錶的大部分操作依賴於遍歷,這一方面雙向鍊錶會效率會好一些,可以根據查詢下標的位置從而選擇從煉表頭開始遍歷還是從鍊錶尾開始遍歷。返回元素個數 public intsize...