SeqList.h
#ifndef SEQ_LIST_H #define SEQ_LIST_H typedef void SeqListNode; typedef void SeqList; /* * 创建顺序表 * @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); /* * 获取顺序表当前已存储元素的个数 * @param list 顺序表的指针 * @return 顺序表中已存储元素的个数 */ int SeqList_Length(SeqList *list); /* * 获取顺序表最大可存储元素的个数 * @param list 顺序表的指针 * @return 顺序表最大可存储元素的个数 */ int SeqList_Capacity(SeqList *list); #endif // SEQLIST_H
SeqList.c
#include "SeqList.h" #include <malloc.h> typedef unsigned int TSeqListNode; //顺序表节点 typedef struct _SeqList { unsigned int length; //顺序表已存储元素的个数 unsigned int capacity; //顺序表最大可存储元素的个数 TSeqListNode *element[];//顺序表节点柔性数组 }TSeqList; /* * 创建顺序表 * @param capacity 顺序表的最大容量 * @return 返回顺序表的指针 */ SeqList* SeqList_Create(unsigned int capacity) { TSeqList *list = 0; //创建一个可容纳SeqList结构体与柔性节点的空间 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; //判断插入的索引是否合法,数组空间是否剩余 ret = ((pos >= 0) && (pos <= s_list->length) && (s_list->length + 1 <= s_list->capacity)); if(ret) {//参数合法,可以插入 //从最后一个开始把数据往后挪 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; } /* * 获取顺序表当前已存储元素的个数 * @param list 顺序表的指针 * @return 顺序表中已存储元素的个数 */ int SeqList_Length(SeqList *list) { TSeqList *s_list = (TSeqList *)list; int ret = -1; if(s_list != 0) { ret = s_list->length; } return ret; } /* * 获取顺序表最大可存储元素的个数 * @param list 顺序表的指针 * @return 顺序表最大可存储元素的个数 */ int SeqList_Capacity(SeqList *list) { TSeqList *s_list = (TSeqList *)list; int ret = (s_list != 0); if(ret) { ret = s_list->capacity; } return ret; }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。