雙向迴圈鍊錶的基本操作

2021-09-21 02:05:49 字數 3466 閱讀 4455

實現鍊錶的增刪查,清空,銷毀

#pragma once

typedef

int datatype;

//鍊錶的節點結構

typedef

struct dlinklist dlinklist,

*dlnode;

// 鍊錶的初始化

void

dllinklistinit

(dlnode* l)

;//建立乙個新的節點

dlnode createnewnode

(datatype data)

;// 在鍊錶的尾部插入值為data的元素

void

dllinklistpushback

(dlnode l, datatype data)

;// 刪除鍊錶最後乙個元素

void

dllinklistpopback

(dlnode l)

;// 在鍊錶的頭部插入值為data的元素

void

dllinklistpushfront

(dlnode l, datatype data)

;// 刪除鍊錶頭部的元素

void

sllinklistpopfront

(dlnode l)

;// 在鍊錶pos位置插入值為data的元素

void

dllinklistinsert

(dlnode pos, datatype data)

;// 刪除鍊錶中pos位置上的元素

void

dllinklisterase

(dlnode pos)

;// 在鍊錶中查詢值為data的元素,找到返回該元素在鍊錶中的位址,否則返回null

dlnode dllinklistfind

(dlnode l, datatype data)

;// 檢測鍊錶是否為空,如果為空返回非0值,非空返回0

intdllinklistempty

(dlnode l)

;// 返回鍊錶中節點的的個數

intdllinklistsize

(dlnode l)

;//清空鍊錶

void

dllinklistclear

(dlnode l)

;// 銷毀鍊錶

void

dllinklistdestroy

(dlnode* l)

;//列印

void

dllinklistprint

(dlnode l)

;

//以下 l 代表頭節點 

// 鍊錶的初始化

void

dllinklistinit

(dlnode* l)

(*l)

->next =

*l;(

*l)->prior =

*l;}

//建立乙個新的節點

dlnode createnewnode

(datatype data)

newnode->data = data;

newnode->next =

null

; newnode->prior =

null;}

// 在鍊錶的尾部插入值為data的元素

void

dllinklistpushback

(dlnode l, datatype data)

// 刪除鍊錶最後乙個元素

void

dllinklistpopback

(dlnode l)

dlnode lastnode = l->prior;

lastnode->prior->next = l;

l->prior = lastnode->prior;

free

(lastnode);}

// 在鍊錶的頭部插入值為data的元素

void

dllinklistpushfront

(dlnode l, datatype data)

// 刪除鍊錶頭部的元素

void

sllinklistpopfront

(dlnode l)

dlnode firstnode = l->next;

l->next = firstnode->next;

firstnode->next->prior = l;

free

(firstnode);}

// 在鍊錶pos位置插入值為data的元素 ,插在data的前面

void

dllinklistinsert

(dlnode pos, datatype data)

dlnode newnode =

createnewnode

(data)

; newnode->next = pos;

newnode->prior = pos->prior;

pos->prior = newnode;

newnode->prior->next = newnode;

}// 刪除鍊錶中pos位置上的元素

void

dllinklisterase

(dlnode pos)

pos->next->prior = pos->prior;

pos->prior->next = pos->next;

free

(pos);}

// 在鍊錶中查詢值為data的元素,找到返回該元素在鍊錶中的位址,否則返回null

dlnode dllinklistfind

(dlnode l, datatype data)

tmpnode = tmpnode->next;

}return

null;}

// 檢測鍊錶是否為空,如果為空返回非0值,非空返回0

intdllinklistempty

(dlnode l)

// 返回鍊錶中節點的的個數

intdllinklistsize

(dlnode l)

return count;

}//清空鍊錶

void

dllinklistclear

(dlnode l)

l->next = l;

l->prior = l;

}// 銷毀鍊錶

void

dllinklistdestroy

(dlnode* l)

//列印

void

dllinklistprint

(dlnode l)

printf

("\n");

}void

main()

雙向迴圈鍊錶基本操作

include include include typedef struct node linklist void clear 清屏 linklist init doublelinklist 初始化雙向迴圈鍊錶 void creat doublelinklist linklist 建立雙向迴圈鍊錶 ...

雙向迴圈鍊錶的基本操作

dlink.h pragma once include typedef int dlinktype typedef struct dlinknode dlinknode dlinknode buynode dlinktype value void destroynode dlinknode posn...

鍊錶的基本操作 單鏈表 雙向鍊錶 迴圈鍊錶

本週第一次講座,學長給我們簡單的概述了資料結構和演算法,然後對鍊錶的一些操作進行了講解,下來之後,我把原來書上的一些 鍊錶的基本操作與鍊錶的逆置,排序等操作結合起來,整理出來 鍊錶是由結點構成的,關鍵是定義結點 c語言程式設計上兩大特例 鍊錶節點的定義 遞迴函式的定義。這兩個違反了先定義再使用。3....