node.h
#ifndef node_h
#define node_h
#include
#include
typedef struct node
node, *dnode;
#endif
list.h
#ifndef list_h
#define list_h
#include "node.h"
//初始化鍊錶
void initdoulinklist(dnode *phead);
//頭插建表
void insertbyhead(dnode *phead, int
value);
//尾插建表
void insertbytail(dnode *phead, int
value);
//獲取鍊錶長度
int getlength(dnode phead);
//正向顯示鍊錶
void showdoulinklist(dnode phead);
//反向顯示鍊錶
void reverseshowlinklist(dnode phead);
//頭刪
void deletebyhead(dnode *phead);
//尾刪
void deletebytail(dnode *phead);
//按值查詢
dnode findbyvalue(dnode phead, int
value);
//按索引查詢
dnode findbyindex(dnode phead, int index);
void insertbyindex(dnode *phead, int index, int
value);
//按索引刪除
void deletebyindex(dnode* phead, int index);
// 按索引修改
void updatebyindex(dnode phead, int index, int
value);
//按值修改
void updatebyvalue(dnode phead, int oldval, int newval);
//按值刪除
void deletebyvalue(dnode *phead, int
value);
//清空雙鏈表(保留頭結點)
void clear(dnode* phead);
#endif
list.c
#include "node.h"
void initdoulinklist(dnode *phead)
void insertbyhead(dnode *phead, int value)
else
}void insertbytail(dnode *phead, int value)
else
}int getlength(dnode phead)
return count;
}void showdoulinklist(dnode phead)
}void reverseshowlinklist(dnode phead)
}void deletebyhead(dnode *phead)
}void deletebytail(dnode *phead)
}dnode findbyvalue(dnode phead, int value)
return
pos;
}dnode findbyindex(dnode phead, int
index)
}return
pos;
}void insertbyindex(dnode *phead, int
index, int value)
else
if (index > 0 && index
<= getlength(*phead))
dnode pnew = (dnode)malloc(sizeof(node));
pnew->value = value;
pnew->next = pos->next;
pos->prior = pnew;
pnew->prior = pos;
pos->next = pnew;
}}void deletebyindex(dnode* phead, int
index)
else
}}void updatebyindex(dnode phead, int
index, int value)
}void updatebyvalue(dnode phead, int oldval, int newval)
}void deletebyvalue(dnode *phead, int value)
if (pos->next == *phead && pos != null)
}void clear(dnode* phead)
}
main.c
#include "node.h"
#include "list.h"
int main(void)
不帶頭結點的鍊錶的基本操作
與帶頭結點的單鏈表相比,不帶頭結點的單鏈表沒有頭結點,可以簡單的理解為,帶頭結點的單鏈表的的頭結點一般資料域不存元素,指標域指向第乙個結點,頭指標 假設為phead 指向頭結點,而不帶頭結點的單鏈表,頭指標指向單鏈表的第乙個結點,如果把鍊錶中的結點進行編號,帶頭結點的鍊錶的頭結點可以理解為是其第0個...
不帶頭結點的雙向迴圈鍊錶
基本概念 迴圈鍊錶 將單鏈表中最後乙個結點的next指向頭結點或者空指標,就使得整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。雙向鍊錶 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域prior,在雙向鍊錶的結點中有兩個指標域,乙個next指向直接後繼,乙個prio...
不帶頭結點的單迴圈鍊錶
建立標頭檔案nlist.h pragma once 不帶頭節點的鍊錶,主要應用在迴圈鍊錶中,其缺點,操作複雜 會出現二級指標 優點 靈活 頭指標指向哪個節點哪個節點就是第乙個節點 不帶頭節點的單鏈迴圈鍊錶,尾節點的next指向第乙個節點 typedef struct nnode nnode,pnli...