雙鏈表 C語言

2021-08-03 22:25:44 字數 2691 閱讀 2192

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。

簡單圖示

這次寫的雙鏈表的頭結點是不儲存資料的,所有資料都是存於頭結點的下乙個結點,即所有判斷都以頭結點的下乙個結點為準。

資料簡介
typedef

struct dnode

link;

函式簡介
link

*creat() //建立雙鏈表

void deleteall(link

*target) //清空鍊錶

void reverse(link

*target) //逆置鍊錶

void length(link

*target) //鍊錶長度

void print(link

*target) //遍歷 (正向遍歷)

void isempty(link

*target) //判空

void search(link

*target) //搜尋資料 按年齡查詢 (正向查詢)

void insert(link

*target) //指定位置插入資料

void delete(link

*target) //指定位置刪除資料

#include

#include

typedef struct dnode

link;

//建立雙鏈表 首結點不存資料

link *creat()

p1->next=null;

return head;

}//清空鍊錶

void deleteall(link *target)

target->next=null;

printf("delete list completed !!\n");

}//逆置鍊錶

void reverse(link *target)

while(p1) //後面的結點不斷往頭結點後插入

p2->pre=target; //將最後乙個結點的前驅指向頭結點

printf("reverse completed !\n");

}//鍊錶長度

void length(link *target)

printf("the list length is :%d\n",n);

}//遍歷 (正向遍歷)

void print(link *target)

printf("\nthe list is :\n");

while(p)

printf("print completed !\n");

}//判空

void isempty(link *target)

//搜尋資料 按年齡查詢 (正向查詢)

void search(link *target)

n++; //記錄索引

p=p->next;

}if(!p) //判斷是否查詢到

printf("can not find data !\n");

else

printf("find the data ! in no.%d \n",n);

}else

}//指定位置插入資料

void insert(link *target)

int n=1;

link *p;

link *data=(link*)malloc(sizeof(link)); //新插入的結點

p=target->next;

while(p) //定位

if(p==null) //判斷是否超出鍊錶長度

printf("please input new data (name and age) :\n");

scanf("%s

%d",data->name,&data->age);

data->pre=p->pre;

p->pre->next=data;

data->next=p;

p->pre=data;

printf("insert completed !\n");

}//指定位置刪除資料

void delete(link *target)

int n=1;

link *p=target->next;

while(p) //定位

if(p==null) //判斷是否超出鍊錶長度

p->pre->next=p->next;

if(p->next!=null) //判斷p是否為最後乙個結點,若是則不用執行

p->next->pre=p->pre;

free(p);

printf("delete coompleted !\n");

}//測試

int main()}}

C語言 雙鏈表

還是 程式設計師面試寶典 上的 include include typedef struct student dnode 建立雙鏈表 dnode create else cycle 0 p next null p head head head next head pre null free p 釋放...

C語言 雙鏈表常用函式

煉表演示 雙向 include include 03link.h 鍊錶的初始化函式 void link init link p link 鍊錶的清理函式 void link deinit link p link 計算有效數字個數的函式,正反一樣,要修改可以讓p first,p mid,p last,...

雙鏈表(c語言版)

雙鏈表相對於單鏈表來說,每乙個節點還存了乙個指向上乙個節點的指標,提公升了便捷性,例如某些情境下我們需要找到當前節點的上乙個節點等問題,雙鏈表對於單鏈表有很大的優勢。雙鏈表尾節點的prev指標指向頭節點,故雙鏈表的頭節點為哨兵衛,不存資料,僅作為標記作用。當單鏈表為空時,僅存在乙個頭節點,next指...