太久不看資料結構都忘記了,所以現在複習下雙向鍊錶,**如下:
list.h
/*雙向鍊錶*/
#ifndef _list_h
#define _list_h
#include #include /*節點*/
typedef struct listnode
list_node;
/*鍊錶*/
typedef struct list
list;
/*初始化空鍊錶*/
void list_init(list* list);
/*釋放剩餘節點並恢復初始狀態*/
void list_deinit(list* list);
/*判斷是否為空*/
bool list_empty(list* list);
/*追加*/
/*前插*/
bool list_insert(list* list,size_t pos,int data);
/*隨機訪問,即可讀,又可寫,所以返回為指標*/
int* list_at(list* list,size_t pos);
/*刪除*/
bool list_erase(list* list,size_t pos);
/*刪除所有的匹配資料*/
void list_remove(list* list,int data);
/*清空*/
void list_clear(list* list);
/*大小*/
size_t list_size(list* list);
/*開始正向迭代*/
int* list_begin(list* list);
/*向後正向迭代*/
int* list_next(list* list);
/*向前正向迭代*/
int* list_prev(list* list);
/*獲取正向迭代的值*/
int* list_current(list* list);
/*判斷正向迭代是否終止*/
bool list_end(list* list);
/*開始反向迭代*/
void list_rbegin(list* list);
/*向後反向迭代*/
int* list_rnext(list* list);
/*向前反向迭代*/
int* list_rprev(list* list);
/*獲取反向迭代的值*/
int* list_rcurrent(list* list);
/*判斷反向迭代是否終止*/
bool list_rend(list* list);
#endif
list.c
#include #include "list.h"
/*建立節點*/
static list_node* create_node(int data,list_node* prev,list_node* next)
/*銷毀節點,返回值後節點位址,引數輸出前節點位址*/
static list_node* destroy_node(list_node* node,list_node** prev)
/*初始化空鍊錶*/
void list_init(list* list)
/*釋放剩餘節點並恢復初始狀態*/
void list_deinit(list* list)
/*判斷是否為空*/
bool list_empty(list* list)
/*追加*/
/*前插*/
bool list_insert(list* list,size_t pos,int data)
return false;
}/*隨機訪問,即可讀,又可寫,所以返回為指標*/
int* list_at(list* list,size_t pos)
/*刪除*/
bool list_erase(list* list,size_t pos)
} return false;
}/*刪除所有的匹配資料*/
void list_remove(list* list,int data) }}
/*清空*/
void list_clear(list* list)
/*大小*/
size_t list_size(list* list)
/*開始正向迭代*/
int* list_begin(list* list)
/*向後正向迭代*/
int* list_next(list* list)
/*向前正向迭代*/
int* list_prev(list* list)
/*獲取正向迭代的值*/
int* list_current(list* list)
/*判斷正向迭代是否終止*/
bool list_end(list* list)
/*開始反向迭代*/
void list_rbegin(list* list)
/*向後反向迭代*/
int* list_rnext(list* list)
/*向前反向迭代*/
int* list_rprev(list* list)
/*獲取反向迭代的值*/
int* list_rcurrent(list* list)
/*判斷反向迭代是否終止*/
bool list_rend(list* list)
list_test.c
#include #include "list.h"
/*測試用例*/
void print(list* list)
void square(list* list)
void test1(void)
int main(void)
雙向鍊錶C語言實現
ifndef stdlist h define stdlist h typedef struct tagstdnode stdnode,lpstdnode typedef struct tagstdlist stdlist,lpstdlist 鍊錶資料結構 struct tagstdnode 鍊錶節...
c語言實現雙向鍊錶
單向鍊錶有一定的缺陷,其中乙個就是只能一條路走到黑,只能前進不能後退,但雙向鍊錶就解決了這一問題 include include typedef struct node node,linklist void create list tail linklist l 頭插法建立 void create ...
C語言實現雙向鍊錶
1.定義兩個結構體,乙個表示鍊錶的乙個單元,另乙個表示鍊錶的頭結點 2.鍊錶的初始化 必須讓頭結點的next和prev指向自己 清除 不刪除頭結點 銷毀 刪除頭結點 3.增操作 每次增加需要開闢乙個單元,所以直接建立乙個函式用來建立單元 頭插 尾插 pos結點之前插 4.刪操作 分為三種 刪除pos...