雙向鍊錶的定義與實現

2021-10-10 18:48:57 字數 3384 閱讀 1948

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

雙向鍊錶實現

雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...