0x00資料結構 C語言實現(雙向迴圈鍊錶)

2022-09-12 17:42:28 字數 3399 閱讀 5135

/*

迴圈雙鏈表

functions:

(在鍊錶中增加附加頭結點的版本)

建立乙個空線性表

將鍊錶置為空表

計算表長度

搜尋函式:找x在表中的位置,返回表項位置

定位函式:返回第i個表項在表中的位置

取第i個表項的值

用x修改第i個表項的內容

插入x在表中第i個表項之後,函式返回成功標誌

刪除表中第i個表項,通過x返回刪除表項的值,函式返回成功標誌

判斷表空,空返回真,否則返回假

判斷表滿:滿返回真,否則返回假

輸出對當前的表排序

*/#ifndef d_c_list

#define d_c_list

//假定每個表項的型別為t

typedef

int t;

#define maxlen 100

typedef

enum bool;

//雙鏈表結點的資料結構。

struct node;

typedef

struct node dcnode;

typedef

struct node *to_node;

typedef to_node d_c_list;

typedef to_node pos;

//建立乙個空鍊錶

dc_list create_list(void);

//將鍊錶置為空表

bool set_empty(dc_list l);

//計算表長度

int calc_length(dc_list l);

dc_list head_addr(dc_list l);

//搜尋函式:找x在表中的位置,返回表項位置

pos search(dc_list l, t x);

//定位函式:返回第i個表項在表中的位置

pos locate(dc_list l, int i);

//取第i個表項的值

t get_val(dc_list l, int i);

//用x修改第i個表項的內容

bool change_val(dc_list l, int i, const t x);

//插入x在表中第i個表項之後,函式返回成功標誌

bool insert_val(dc_list l, int i, const t x);

//刪除表中第i個表項,通過x返回刪除表項的值,函式返回成功標誌

bool delete_val(dc_list l, int i, t *x);

//判斷表空,空返回真,否則返回假

bool isempty(dc_list l);

//輸出

void output(dc_list l);

//對當前的表排序

bool sort(dc_list l);

#endif

#include 

#include

#include "double_linkedc_list.h"

/*迴圈雙鏈表結點的資料結構

*/struct node;

/*struct node;

typedef struct node dcnode;

typedef struct node *to_node;

typedef to_node d_c_list;

typedef to_node pos;

*///建立乙個空迴圈雙鏈表

dc_list create_list(void)

//該迴圈雙鏈表帶頭節點,頭節點的val域儲存鍊錶的長度

//將鍊錶置為空表

bool set_empty(dc_list l)

l->next = l;

l->prev = l;

l->val = 0;

return

true;

}//計算表長度

int calc_length(dc_list l)

pos head_addr(dc_list l)

//搜尋函式:找x在表中的位置,返回表項位置

pos search(dc_list l, t x)

if(i>l->val) return null;

else

return tmp;

}//定位函式:返回第i個表項在表中的位置

pos locate(dc_list l, int i)

return tmp;

} else

}//取第i個表項的值

t get_val(dc_list l, int i)

return tmp->val;

} else

}//用x修改第i個表項的內容

bool change_val(dc_list l, int i, const t x)

tmp->val = x;

return

true;

} else

}//插入x在表中第i個表項之後,函式返回成功標誌

bool insert_val(dc_list l, int i, const t x)

pos t = (pos)malloc(sizeof(dcnode));

t->next = tmp->next;

(tmp->next)->prev = t;

t->prev = tmp;

tmp->next = t;

t->val = x;

l->val++;

return

true;

} else

}//刪除表中第i個表項,通過x返回刪除表項的值,函式返回成功標誌

bool delete_val(dc_list l, int i, t *x)

*x = (tmp->next)->val;

tmp->next = (tmp->next)->next;

(tmp->next)->prev = tmp;

l->val--;

return

true;

} else

}//判斷表空,空返回真,否則返回假

bool isempty(const dc_list l)

//輸出

void output(const dc_list l)

}//對當前的表排序

bool sort(const dc_list l)

tmp1 = tmp1->next;

tmp2 = tmp2->next;

}tmp = tmp->prev;

}return

true;

//快速排序

//歸併排序

}

資料結構 雙向鍊錶的c語言實現

dlinklist.h ifndef dlinklist h define dlinklist h include typedef void dlinklist typedef struct tag dlinklistnode dlinklistnode dlinklist dlinklist cr...

資料結構 佇列(C語言實現)

佇列 c語言實現 include include define queueisempty arg arg size 0 define queueisfull arg arg size arg capacity 判斷是否為空或為滿。巨集定義,函式調銷太大。佇列使用size和capacity顯式的判斷是...

資料結構C語言實現 ADT Triplet

declartion.h 型別宣告 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 define elemtype int typedef elemtype t...