/*
迴圈雙鏈表
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...