雙向鍊錶(非迴圈)

2021-08-10 00:03:07 字數 2666 閱讀 2414

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。

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