C语言顺序表的实现

    xiaoxiao2021-03-25  47

    用C语言实现顺序表的一些接口

    在SeqList.h文件中声明

    #ifndef _SEQLIST_H_ #define _SEQLIST_H_ #define MAXSIZE 10 typedef int DataType; typedef unsigned int size_t; typedef struct SeqList { DataType _array[MAXSIZE]; size_t _size;// 有效数据元素的个数 }SeqList, *PSeqList; ///函数功能/// void InitSeqList(PSeqList pSeq);//初始化 void PushBack(PSeqList pSeq, DataType data);//尾插 void PopBack(PSeqList pSeq);//尾删 void PushFront(PSeqList pSeq, DataType data);//头插 void PopFront(PSeqList pSeq);//头删 void Insert(PSeqList pSeq, size_t pos, DataType data);//插入指定位置 void Erase(PSeqList pSeq, size_t pos);//删除指定位置 int Find(PSeqList pSeq, DataType data);//查找 void Remove(PSeqList pSeq, DataType data);//删除一个data void RemoveAll(PSeqList pSeq, DataType data);//删除所以data void PrintSeq(PSeqList pSeq);//打印顺序表 判满、判空函数 int checkFull(PSeqList pSeq); int checkEmpty(PSeqList pSeq); #endif //_SEQLIST_H_

    在SeqList,c中定义功能

    #include "SeqList.h" #include <stdio.h> #include <string.h> #include <assert.h> 主要功能函数/// //初始化 void InitSeqList(PSeqList pSeq) { assert(NULL != pSeq); memset(pSeq->_array, 0, MAXSIZE*sizeof(DataType)); pSeq->_size = 0; } //尾插 void PushBack(PSeqList pSeq, DataType data) { assert(NULL != pSeq); if (0 == checkFull(pSeq)) return ; pSeq->_array[pSeq->_size++] = data; } //尾删 void PopBack(PSeqList pSeq) { assert(NULL != pSeq); if (0 == checkEmpty(pSeq)) return ; --pSeq->_size; } //头插 void PushFront(PSeqList pSeq, DataType data) { size_t i = 0; assert(NULL != pSeq); if (0 == checkFull(pSeq)) return ; i = pSeq->_size; while (i > 0) pSeq->_array[i--] = pSeq->_array[i-1]; pSeq->_array[0] = data; ++pSeq->_size; } //头删 void PopFront(PSeqList pSeq) { size_t i = 0; //定义为size_t,避免和pos比较时类型不匹配。发生隐式变换。 assert(pSeq); if (0 == checkEmpty(pSeq)) return ; while (i < (pSeq->_size-1)) pSeq->_array[i++] = pSeq->_array[i+1]; --pSeq->_size; } //插入指定位置数据 void Insert(PSeqList pSeq, size_t pos, DataType data) { size_t i = 0; assert(NULL != pSeq); if (0 == checkFull) return ; if (pos == 0) PushFront(pSeq, data); else if (pos >= pSeq->_size) PushBack(pSeq, data); else { i = pSeq->_size; while (i < pos) pSeq->_array[i--] = pSeq->_array[i-1]; pSeq->_array[pos] = data; ++pSeq->_size; } } //删除指定位置数据 void Erase(PSeqList pSeq, size_t pos) { size_t i = 0; assert(NULL != pSeq); if (0 == checkEmpty(pSeq)) return ; if (pos == 0) PopFront(pSeq); else if (pos == pSeq->_size-1) PopBack(pSeq); else if (pos >= pSeq->_size) printf("error\n"); else { i = pos; while (i < pSeq->_size-1) pSeq->_array[i++] = pSeq->_array[i+1]; --pSeq->_size; } } //查找data int Find(PSeqList pSeq, DataType data) { size_t i = 0; assert(NULL != pSeq); if (0 == checkEmpty(pSeq)) return -1; for (; i < pSeq->_size; i++) if (pSeq->_array[i] == data) return i; return -1; } //删除一个data void Remove(PSeqList pSeq, DataType data) { int pos = -1; assert(NULL != pSeq); if (0 == checkEmpty(pSeq)) return ; if ((pos = Find(pSeq, data)) >= 0) Erase(pSeq, pos); } //删除所有data void RemoveAll(PSeqList pSeq, DataType data) { size_t size = 0; size_t i = 0; size_t count = 0; assert(NULL != pSeq); if (0 == checkEmpty(pSeq)) return ; size = pSeq->_size; for (; i < size-count; i++) if (pSeq->_array[i] == data) { Erase(pSeq, i); --i; ++count; } } //打印顺序表 void PrintSeq(PSeqList pSeq) { size_t i = 0; assert(NULL != pSeq); for (; i < pSeq->_size; i++) printf("%d->", pSeq->_array[i]); printf("null\n"); } /判满、判空函数功能// int checkFull(PSeqList pSeq) { if (MAXSIZE <= pSeq->_size) { printf("Space is full!\n"); return 0; } return 1; } int checkEmpty(PSeqList pSeq) { if (0 == pSeq->_size) { printf("Space is empty!\n"); return 0; } return 1; }

    转载请注明原文地址: https://ju.6miu.com/read-33206.html

    最新回复(0)