c语言线性顺序表,【C语言--数据结构】线性顺序表

本文介绍了如何用C语言实现顺序存储结构的线性表,包括创建(SeqList_Create)、销毁(SeqList_Destory)、清空(SeqList_Clear)、获取长度(SeqList_Length)、容量(SeqList_Capacity)、插入(SeqList_Insert)、获取元素(SeqList_Get)和删除(SeqList_Delete)等函数。
摘要由CSDN通过智能技术生成

1 /*

2 ** 顺序存储结构的线性表3 */

4 #include "SeqList.h"

5

6 typedef unsigned intTSeqListNode;7

8 typedef struct_tag_SeqList9 {10 intiCapacity;11 intiLength;12 TSeqListNode *node;13 }TSeqList;14

15 /*线性表相关函数的实现*/

16

17 /**************************************************************************18 ** 函 数 名: SeqList_Create19 ** 函数作用: 创建一个线性顺序表20 ** 返 回 值: SeqList *21 ** 日 期: 2017年2月13日22 ** 作 者: Rookie23 ***************************************************************************/

24 SeqList *SeqList_Create(intiCapacity)25 {26 TSeqList* pstRet =NULL;27

28 if (0 <=iCapacity)29 {30 pstRet = (TSeqList *)malloc(sizeof(TSeqList) + sizeof(TSeqListNode)*iCapacity);31 }32

33 if (pstRet !=NULL)34 {35 pstRet->iCapacity =iCapacity;36 pstRet->iLength = 0;37 pstRet->node = (TSeqListNode *)(pstRet + 1);38 }39

40 returnpstRet;41 }42

43 /**************************************************************************44 ** 函 数 名: SeqList_Destory45 ** 函数作用: 销毁一个线性顺序表46 ** 返 回 值: void47 ** 日 期: 2017年2月13日48 ** 作 者: Rookie49 ***************************************************************************/

50 void SeqList_Destory(SeqList *pstList)51 {52 free(pstList);53

54 return;55 }56

57 /**************************************************************************58 ** 函 数 名: SeqList_Clear59 ** 函数作用: 一个线性顺序表清空60 ** 返 回 值: void61 ** 日 期: 2017年2月13日62 ** 作 者: Rookie63 ***************************************************************************/

64 void SeqList_Clear(SeqList*pstList)65 {66 TSeqList* pstListTemp = (TSeqList *)pstList;67

68 if (pstListTemp !=NULL)69 {70 pstListTemp->iLength = 0;71 }72

73 return;74 }75

76 /**************************************************************************77 ** 函 数 名: SeqList_Length78 ** 函数作用: 获取顺序表的长度79 ** 返 回 值: int80 ** 日 期: 2017年2月14日81 ** 作 者: Rookie82 ***************************************************************************/

83 int SeqList_Length(SeqList*pstList)84 {85 int iRet = -1;86 TSeqList* pstListTemp = (TSeqList *)pstList;87

88 if (pstListTemp !=NULL)89 {90 iRet = pstListTemp->iLength;91 }92

93 returniRet;94 }95

96 /**************************************************************************97 ** 函 数 名: SeqList_Capacity98 ** 函数作用: 获取顺序表的容量99 ** 返 回 值: int100 ** 日 期: 2017年2月14日101 ** 作 者: Rookie102 ***************************************************************************/

103 int SeqList_Capacity(SeqList*pstList)104 {105 int iRet = -1;106 TSeqList* pstListTemp = (TSeqList *)pstList;107

108 if (pstListTemp !=NULL)109 {110 iRet = pstListTemp->iCapacity;111 }112

113 returniRet;114 }115

116 /**************************************************************************117 ** 函 数 名: SeqList_Insert118 ** 函数作用: 向线性表中插入一个节点119 ** 返 回 值: int120 ** 日 期: 2017年2月14日121 ** 作 者: Rookie122 ***************************************************************************/

123 int SeqList_Insert(SeqList* pstList, SeqListNode *pstNode, intiPos)124 {125 TSeqList* pstListTemp = (TSeqList *)pstList;126 int iRet = (pstListTemp !=NULL);127 intiLoop;128

129 iRet = iRet && ((pstListTemp->iLength + 1) <= pstListTemp->iCapacity);130 iRet = iRet && (0 <=iPos);131

132 if(iRet)133 {134 if (iPos > pstListTemp->iLength)135 {136 iPos = pstListTemp->iLength;137 }138

139 for (iLoop = pstListTemp->iLength; iLoop > iPos; iLoop--)140 {141 pstListTemp->node[iLoop] = pstListTemp->node[iLoop-1];142 }143

144 pstListTemp->node[iLoop] =(TSeqListNode)pstNode;145 pstListTemp->iLength++;146 }147

148 returniRet;149 }150

151 /**************************************************************************152 ** 函 数 名: SeqList_Get153 ** 函数作用: 获取顺序表的指定位置的值154 ** 返 回 值: int155 ** 日 期: 2017年2月14日156 ** 作 者: Rookie157 ***************************************************************************/

158 SeqListNode* SeqList_Get(SeqList* pstList, intiPos)159 {160 TSeqList* pstListTemp = (TSeqList *)pstList;161 SeqListNode* pstRet =NULL;162

163 if ((NULL != pstListTemp) && (0 <= iPos) && (iPos <= pstListTemp->iLength))164 {165 pstRet = (SeqListNode*)pstListTemp->node[iPos];166 }167

168 returnpstRet;169 }170

171 /**************************************************************************172 ** 函 数 名: SeqList_Delete(SeqList* pstList, int iPos)173 ** 函数作用: 删除顺序表的指定位置的值174 ** 返 回 值:175 ** 日 期: 2017年2月14日176 ** 作 者: Rookie177 ***************************************************************************/

178 SeqListNode* SeqList_Delete(SeqList* pstList, intiPos)179 {180 TSeqList* pstListTemp = (TSeqList *)pstList;181 SeqListNode* pstRet =SeqList_Get(pstList, iPos);182 intiLoop;183

184 if (NULL !=pstRet)185 {186 for (iLoop = iPos+1; iLoop < pstListTemp->iLength; iLoop++)187 {188 pstListTemp->node[iLoop-1] = pstListTemp->node[iLoop];189 }190 pstListTemp->node[iLoop] =(TSeqListNode)NULL;191 pstListTemp->iLength--;192 }193

194 returnpstRet;195 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值