之前的部落格講到了線性表的鏈式儲存結構,實現了鍊錶的各種操作(但是,單鏈表有單向性的缺點,為了克服這一缺點,可以嘗試實現雙向鍊錶。下圖是雙向鍊錶的結構:
我們也可以實現雙向鍊錶的一些基本操作:
以下是實現基本操作的**:
#include
#include
#define ok 1
#define error 0
typedef int elemtype;
typedef int status;
typedef struct dnode dnode, *dullinklist;
status createlist(dullinklist &l, int n)
int i =
0; for (i = n; i >
0; i--)
return ok;
}status insertlist(dullinklist &l, int i, elemtype e)
if (p == l || j > i -
1) return error;
if (!(s= (dullinklist) malloc(sizeof(dnode))))
return error;
s->
data
= e; //插入結點
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
return ok;
}status deletelist(dullinklist &l, int i, elemtype &e)
if (p->next == l || j > i -
1) return error;
e = p->
data; //獲取結點元素
p->prior->next = p->next; //刪除結點
p->next->prior = p->prior;
free(p); //釋放被刪除結點的空間
return ok;
}
雙向鍊錶實現
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...