您好,登錄后才能下訂單哦!
SeqList.h
#ifndef SEQ_LIST_H #define SEQ_LIST_H typedef void SeqListNode; typedef void SeqList; /* * 創(chuàng)建順序表 * @param capacity 順序表的最大容量 * @return 返回順序表的指針 */ SeqList* SeqList_Create(unsigned int capacity); /* * 銷毀順序表 * @param list 順序表的指針 */ void SeqList_Destroy(SeqList *list); /* * 清空順序表 * @param list 順序表的指針 */ void SeqList_Clear(SeqList *list); /* * 向順序表pos位置處插入元素 * @param list 順序表指針 * @param node 元素指針 * @param pos 插入的索引 */ int SeqList_Insert(SeqList *list,SeqListNode *node,int pos); /* * 獲取順序表中索引位置處的元素 * @param list 順序表指針 * @param pos 順序表索引值 * @param return 元素指針 */ SeqListNode* SeqList_Get(SeqList *list,int pos); /* * 刪除順序表中索引位置處的值 * @param list 順序表的指針 * @param pos 順序表索引 * @param return 非0表示刪除成功 */ int SeqList_Remove(SeqList *list,int pos); /* * 獲取順序表當(dāng)前已存儲(chǔ)元素的個(gè)數(shù) * @param list 順序表的指針 * @return 順序表中已存儲(chǔ)元素的個(gè)數(shù) */ int SeqList_Length(SeqList *list); /* * 獲取順序表最大可存儲(chǔ)元素的個(gè)數(shù) * @param list 順序表的指針 * @return 順序表最大可存儲(chǔ)元素的個(gè)數(shù) */ int SeqList_Capacity(SeqList *list); #endif // SEQLIST_H
SeqList.c
#include "SeqList.h" #include <malloc.h> typedef unsigned int TSeqListNode; //順序表節(jié)點(diǎn) typedef struct _SeqList { unsigned int length; //順序表已存儲(chǔ)元素的個(gè)數(shù) unsigned int capacity; //順序表最大可存儲(chǔ)元素的個(gè)數(shù) TSeqListNode *element[];//順序表節(jié)點(diǎn)柔性數(shù)組 }TSeqList; /* * 創(chuàng)建順序表 * @param capacity 順序表的最大容量 * @return 返回順序表的指針 */ SeqList* SeqList_Create(unsigned int capacity) { TSeqList *list = 0; //創(chuàng)建一個(gè)可容納SeqList結(jié)構(gòu)體與柔性節(jié)點(diǎn)的空間 int size = sizeof(TSeqList) + sizeof(TSeqListNode) * capacity; list = (TSeqList *)malloc(size); if(list != 0) { list->length = 0; list->capacity = capacity; } return list; } /* * 銷毀順序表 * @param list 順序表的指針 */ void SeqList_Destroy(SeqList *list) { free(list); } /* * 清空順序表 * @param list 順序表的指針 */ void SeqList_Clear(SeqList *list) { TSeqList *s_list = (TSeqList *)list; if(s_list != 0) { s_list->length = 0; } } /* * 向順序表pos位置處插入元素 * @param list 順序表指針 * @param node 元素指針 * @param pos 插入的索引 * @param return 返回非0表示插入成功 */ int SeqList_Insert(SeqList *list,SeqListNode *node,int pos) { int i; //判斷順序表指針和被插入元素的指針是否為空 int ret = ((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++; } return ret; } /* * 獲取順序表中索引位置處的元素 * @param list 順序表指針 * @param pos 順序表索引值 * @param return 元素指針 */ SeqListNode* SeqList_Get(SeqList *list,int pos) { 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]; } return s_node; } /* * 刪除順序表中索引位置處的值 * @param list 順序表的指針 * @param pos 順序表索引 * @param return 順序表中索引位置處元素的值 */ int SeqList_Remove(SeqList *list,int pos) { int i; TSeqList *s_list = (TSeqList *)list; int ret = ((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--; } return ret; } /* * 獲取順序表當(dāng)前已存儲(chǔ)元素的個(gè)數(shù) * @param list 順序表的指針 * @return 順序表中已存儲(chǔ)元素的個(gè)數(shù) */ int SeqList_Length(SeqList *list) { TSeqList *s_list = (TSeqList *)list; int ret = -1; if(s_list != 0) { ret = s_list->length; } return ret; } /* * 獲取順序表最大可存儲(chǔ)元素的個(gè)數(shù) * @param list 順序表的指針 * @return 順序表最大可存儲(chǔ)元素的個(gè)數(shù) */ int SeqList_Capacity(SeqList *list) { TSeqList *s_list = (TSeqList *)list; int ret = (s_list != 0); if(ret) { ret = s_list->capacity; } return ret; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。