?? chain_common.c
字號:
/**********************************************************************************************************************************/#define CHAIN_COMMON#include "group_common.h"/**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//*以下為各函數的實現*//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************/struct chain_init chain_Create(){ struct chain_init newchain; newchain.chain_length=0; newchain.chain_head=NULL; return newchain;};struct chain_cur chain_Curcreate(struct chain_init* chain_name){ struct chain_cur new_cur; new_cur.chain_name=chain_name; new_cur.chain_point=NULL; new_cur.chain_local=0; return new_cur; };LONGINT chain_Length(struct chain_cur* cur_name){ return cur_name->chain_name->chain_length;};SHORTINT chain_Eof(struct chain_cur* cur_name){ if(cur_name->chain_point==NULL)return ERR_NODATA; if(cur_name->chain_local>cur_name->chain_name->chain_length)return ERR_OUTOFLENGTH; if(cur_name->chain_point->chain_next==NULL)return 1; return 0;};LONGINT chain_Append(DATA_TYPE indata,struct chain_cur* cur_name){ struct chain_node* new_node; if(cur_name->chain_point==NULL) { new_node=(struct chain_node *)malloc(sizeof(struct chain_node)); if(new_node==NULL)return ERR_OUTOFMEMORY; new_node->node_data=indata; new_node->chain_next=NULL; cur_name->chain_name->chain_head=new_node; cur_name->chain_point=new_node; cur_name->chain_name->chain_length++; return 1; }; chain_Last(cur_name); new_node=(struct chain_node *)malloc(sizeof(struct chain_node)); if(new_node==NULL)return ERR_OUTOFMEMORY; new_node->node_data=indata; new_node->chain_next=NULL; cur_name->chain_point->chain_next=new_node; cur_name->chain_name->chain_length++; cur_name->chain_local=(cur_name->chain_name->chain_length-1); return cur_name->chain_name->chain_length;};LONGINT chain_Insert(DATA_TYPE indata,struct chain_cur* cur_name){ struct chain_node* new_node; if(cur_name->chain_point==NULL) { new_node=(struct chain_node *)malloc(sizeof(struct chain_node)); if(new_node==NULL)return ERR_OUTOFMEMORY; new_node->node_data=indata; new_node->chain_next=NULL; cur_name->chain_point=new_node; cur_name->chain_name->chain_length++; return 1; }; new_node=(struct chain_node *)malloc(sizeof(struct chain_node)); if(new_node==NULL)return ERR_OUTOFMEMORY; new_node->node_data=indata; new_node->chain_next=cur_name->chain_point->chain_next; cur_name->chain_point->chain_next=new_node; chain_Next(cur_name); cur_name->chain_local++; cur_name->chain_name->chain_length++; return cur_name->chain_name->chain_length;};LONGINT chain_Remove(struct chain_cur* cur_name){ struct chain_node* node_drop; if(cur_name->chain_point==NULL)return ERR_NODATA; if(chain_Length(cur_name)==1) { free(cur_name->chain_point); cur_name->chain_point=NULL; cur_name->chain_name->chain_head=NULL; cur_name->chain_name->chain_length--; cur_name->chain_local=-1; return cur_name->chain_name->chain_length; }; if(cur_name->chain_point==cur_name->chain_name->chain_head) { node_drop=cur_name->chain_point; cur_name->chain_name->chain_head=cur_name->chain_point->chain_next; chain_Last(cur_name); free(node_drop); cur_name->chain_name->chain_length--; cur_name->chain_local=(cur_name->chain_name->chain_length-1); return cur_name->chain_name->chain_length; }; if(cur_name->chain_point->chain_next==NULL) { chain_Prev(cur_name); cur_name->chain_local--; free(cur_name->chain_point->chain_next); cur_name->chain_point->chain_next=NULL; cur_name->chain_name->chain_length--; return cur_name->chain_name->chain_length; }; chain_Prev(cur_name); cur_name->chain_local--; node_drop=cur_name->chain_point->chain_next; cur_name->chain_point->chain_next=cur_name->chain_point->chain_next->chain_next; free(node_drop); cur_name->chain_name->chain_length--; return cur_name->chain_name->chain_length;};void chain_First(struct chain_cur* cur_name){ cur_name->chain_point=cur_name->chain_name->chain_head; cur_name->chain_local=0;};void chain_Next(struct chain_cur* cur_name){ if(cur_name->chain_point==NULL)return; if(cur_name->chain_point->chain_next==NULL)return; cur_name->chain_point=cur_name->chain_point->chain_next; cur_name->chain_local++;};void chain_Prev(struct chain_cur* cur_name){ struct chain_node* now_node; if(cur_name->chain_point==NULL)return; now_node=cur_name->chain_point; chain_First(cur_name); cur_name->chain_local=0; for(;;) { if(cur_name->chain_point->chain_next==now_node)break; if(cur_name->chain_point->chain_next==NULL)break; chain_Next(cur_name); cur_name->chain_local++; };};void chain_Last(struct chain_cur* cur_name){ if(cur_name->chain_point==NULL)return; chain_First(cur_name); for(;;) { chain_Next(cur_name); if(cur_name->chain_point->chain_next==NULL)break; }; cur_name->chain_local=(cur_name->chain_name->chain_length-1);};void chain_Goto(LONGINT chain_location,struct chain_cur* cur_name){ LONGINT i=0; if(cur_name->chain_point==NULL)return; chain_First(cur_name); cur_name->chain_local=0; for(;;) { if(i==chain_location)break; if(cur_name->chain_point->chain_next==NULL)break; chain_Next(cur_name); cur_name->chain_local++; i++; };};DATA_TYPE chain_Get(struct chain_cur* cur_name){ if(cur_name->chain_point==NULL)return ERR_NODATA; return cur_name->chain_point->node_data;};void chain_Set(DATA_TYPE indata,struct chain_cur* cur_name){ if(cur_name->chain_point==NULL)return; cur_name->chain_point->node_data=indata;};void chain_Drop(struct chain_cur* cur_name){ chain_Last(cur_name); for(;;) { if(cur_name->chain_point==cur_name->chain_name->chain_head) { free(cur_name->chain_name->chain_head); cur_name->chain_point=NULL; cur_name->chain_name->chain_head=NULL; cur_name->chain_name->chain_length=0; return; }; chain_Prev(cur_name); free(cur_name->chain_point->chain_next); };};/**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//*調試用*//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -