【C語言數(shù)據(jù)結(jié)構(gòu)】順序表

SeqList.h?
#ifndefSEQ_LIST_H#defineSEQ_LIST_HtypedefvoidSeqListNode;typedefvoidSeqList;/**創(chuàng)建順序表*@paramcapacity順序表的最大容量*@return返回順序表的指針*/SeqList*SeqList_Create(unsignedintcapacity);/**銷毀順序表*@paramlist順序表的指針*/voidSeqList_Destroy(SeqList*list);/**清空順序表*@paramlist順序表的指針*/voidSeqList_Clear(SeqList*list);/**向順序表pos位置處插入元素*@paramlist順序表指針*@paramnode元素指針*@parampos插入的索引*/intSeqList_Insert(SeqList*list,SeqListNode*node,intpos);/**獲取順序表中索引位置處的元素*@paramlist順序表指針*@parampos順序表索引值*@paramreturn元素指針*/SeqListNode*SeqList_Get(SeqList*list,intpos);/**刪除順序表中索引位置處的值*@paramlist順序表的指針*@parampos順序表索引*@paramreturn非0表示刪除成功*/intSeqList_Remove(SeqList*list,intpos);/**獲取順序表當(dāng)前已存儲元素的個(gè)數(shù)*@paramlist順序表的指針*@return順序表中已存儲元素的個(gè)數(shù)*/intSeqList_Length(SeqList*list);/**獲取順序表最大可存儲元素的個(gè)數(shù)*@paramlist順序表的指針*@return順序表最大可存儲元素的個(gè)數(shù)*/intSeqList_Capacity(SeqList*list);#endif//SEQLIST_HSeqList.c?
#include"SeqList.h"#include<malloc.h>typedefunsignedintTSeqListNode;//順序表節(jié)點(diǎn)typedefstruct_SeqList{unsignedintlength;//順序表已存儲元素的個(gè)數(shù)unsignedintcapacity;//順序表最大可存儲元素的個(gè)數(shù)TSeqListNode*element[];//順序表節(jié)點(diǎn)柔性數(shù)組}TSeqList;/**創(chuàng)建順序表*@paramcapacity順序表的最大容量*@return返回順序表的指針*/SeqList*SeqList_Create(unsignedintcapacity){TSeqList*list=0;//創(chuàng)建一個(gè)可容納SeqList結(jié)構(gòu)體與柔性節(jié)點(diǎn)的空間intsize=sizeof(TSeqList)+sizeof(TSeqListNode)*capacity;list=(TSeqList*)malloc(size);if(list!=0){list->length=0;list->capacity=capacity;}returnlist;}/**銷毀順序表*@paramlist順序表的指針*/voidSeqList_Destroy(SeqList*list){free(list);}/**清空順序表*@paramlist順序表的指針*/voidSeqList_Clear(SeqList*list){TSeqList*s_list=(TSeqList*)list;if(s_list!=0){s_list->length=0;}}/**向順序表pos位置處插入元素*@paramlist順序表指針*@paramnode元素指針*@parampos插入的索引*@paramreturn返回非0表示插入成功*/intSeqList_Insert(SeqList*list,SeqListNode*node,intpos){inti;//判斷順序表指針和被插入元素的指針是否為空intret=((list!=0)&&(node!=0));TSeqList*s_list=(TSeqList*)list;TSeqListNode*s_node=(TSeqListNode*)node;//判斷插入的索引是否合法,數(shù)組空間是否剩余ret=((pos>=0)&&(pos<=s_list->length)&&(s_list->length+1<=s_list->capacity));if(ret){//參數(shù)合法,可以插入//從最后一個(gè)開始把數(shù)據(jù)往后挪for(i=s_list->length;i>pos;i--){s_list->element[i]=s_list->element[i-1];}s_list->element[i]=s_node;s_list->length++;}returnret;}/**獲取順序表中索引位置處的元素*@paramlist順序表指針*@parampos順序表索引值*@paramreturn元素指針*/SeqListNode*SeqList_Get(SeqList*list,intpos){SeqListNode*s_node=0;TSeqList*s_list=(TSeqList*)list;if((s_list!=0)&&(pos>=0)&&(pos<s_list->length)){s_node=s_list->element[pos];}returns_node;}/**刪除順序表中索引位置處的值*@paramlist順序表的指針*@parampos順序表索引*@paramreturn順序表中索引位置處元素的值*/intSeqList_Remove(SeqList*list,intpos){inti;TSeqList*s_list=(TSeqList*)list;intret=((s_list!=0)&&(pos>=0)&&(pos<s_list->length));if(ret){for(i=pos+1;i<s_list->length;i++){s_list->element[i-1]=s_list->element[i];}s_list->length--;}returnret;}/**獲取順序表當(dāng)前已存儲元素的個(gè)數(shù)*@paramlist順序表的指針*@return順序表中已存儲元素的個(gè)數(shù)*/intSeqList_Length(SeqList*list){TSeqList*s_list=(TSeqList*)list;intret=-1;if(s_list!=0){ret=s_list->length;}returnret;}/**獲取順序表最大可存儲元素的個(gè)數(shù)*@paramlist順序表的指針*@return順序表最大可存儲元素的個(gè)數(shù)*/intSeqList_Capacity(SeqList*list){TSeqList*s_list=(TSeqList*)list;intret=(s_list!=0);if(ret){ret=s_list->capacity;}returnret;}?
了解更多網(wǎng)絡(luò)知識關(guān)注:http://www.vecloud.com/