雙迴圈鍊錶的基本操作(不帶頭結點)

2021-08-22 14:48:29 字數 2730 閱讀 4470

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