雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。
1、標頭檔案(dilst.h)
#pragma once
//帶頭結點的雙向鍊錶(非迴圈)
typedef struct dnode
dnode,*dlist;
//初始化雙向鍊錶
void initdlist(dlist plist);
//頭插
bool insert_head(dlist plist,int val);
//尾插
bool insert_tail(dlist plist,int val);
//查詢
dnode *search(dlist plist,int key);
//刪除
bool delete(dlist plist,int key);
//獲取長度(資料結點的個數)
int getlength(dlist plist);
//判空
bool isempty(dlist plist);
//清空
void clear(dlist plist);
//摧毀
void destroy(dlist plist);
//列印
void show(dlist plist);
//逆置
void reverse(dlist plist);
2、原始檔(dlist.cpp)
#include#include#include#include"dlist.h"
//初始化雙向鍊錶
void initdlist(dlist plist)
plist->next = null;
plist->prio = null;
}//頭插
bool insert_head(dlist plist,int val)
dnode *p = (dnode *)malloc(sizeof(dnode));
p->data = val;
p->next = plist->next;
plist->next = p;
p->prio = plist;
if(p->next != null)
return true;
}//尾插
bool insert_tail(dlist plist,int val)
dnode *p = (dnode *)malloc(sizeof(dnode));
p->data = val;
dnode *q;
for(q = plist;q->next != null;q = q->next);//找尾巴
//將p插在q的後面
p->next = q->next;
q->next = p;
p->prio = q;
return true;
}//查詢
dnode *search(dlist plist,int key)
for(dnode *p = plist->next;p != null;p = p->next) }
return null;
}//刪除
bool delete(dlist plist,int key)
dnode *p = search(plist,key);
if(p == null)
p->prio->next = p->next;
if(p->next != null)
free(p);
return true;
}//獲取長度(資料結點的個數)
int getlength(dlist plist)
return count;
}//判空
bool isempty(dlist plist)
//清空
void clear(dlist plist)
//摧毀
void destroy(dlist plist)
}//列印
void show(dlist plist)
printf("\n");
}//逆置
void reverse(dlist plist)
}
3、測試原始檔(test.cpp)
#include#include//測試記憶體洩漏的標頭檔案
#include"dlist.h"
int main()
show(&head1);
show(&head2);
printf("%d\n",delete(&head1,3));
printf("%d\n",getlength(&head2));
destroy(&head1);
destroy(&head1);
reverse(&head2);
show(&head2);
return 0;
}
雙向鍊錶和雙向迴圈鍊錶
和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...
迴圈鍊錶,雙向鍊錶
迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...
鍊錶 雙向迴圈鍊錶
雙向迴圈鍊錶與單鏈表一樣,都是邏輯連續 物理不連續的儲存方式,但它的效果要遠遠優於單鏈表,其結構如下 雙向迴圈鍊錶首先要有乙個頭節點,頭節點中不存放資料,真正的資料從頭節點的下乙個節點開始存放 然後每乙個節點都有兩個指標,分別指向前乙個節點和後乙個節點 最後頭尾相連,就成了雙向迴圈鍊錶。includ...