雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。簡單圖示
這次寫的雙鏈表的頭結點是不儲存資料的,所有資料都是存於頭結點的下乙個結點,即所有判斷都以頭結點的下乙個結點為準。資料簡介
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指...