seqlist.h
<span style="font-size:24px;">#ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<stdio.h> #include<assert.h> #include<string.h> #define MAX_SIZE 1000 typedef int DataType; typedef struct seqlist { DataType array[MAX_SIZE]; size_t size; }seqlist; typedef enum tag { one,//删去第一个 more,//所有都删去 }Tag; void Init(seqlist* pSeq); void PushBack(seqlist* pSeq, DataType x); void PushFront(seqlist* pSeq, DataType x); void Print(seqlist* pSeq); void PopBack(seqlist* pSeq); void PopFront(seqlist*pSeqsssss); void Insert(seqlist* pSeq, size_t index, DataType x); void Modify(seqlist* pSeq, size_t index, DataType x); void removed(seqlist* pSeq, size_t index); void Erase(seqlist* pSeq, DataType x, Tag all); int Find(seqlist* pSeq, DataType x, size_t index); #endif //__SEQLIST_H__</span>
#include"seqlist.h" void Init(seqlist* pSeq) { assert(pSeq); memset(pSeq->array, 0, MAX_SIZE*sizeof(DataType)); pSeq->size = 0;/////////////size要初始化。否则是随机值会出现故障 } void PushBack(seqlist* pSeq, DataType x) { assert(pSeq); assert(pSeq->size <= MAX_SIZE); pSeq->array[pSeq->size++] = x; } void PushFront(seqlist* pSeq, DataType x) { assert(pSeq); assert(pSeq->size <= MAX_SIZE); int i; for (i = pSeq->size; i > 0; i--) { pSeq->array[i] = pSeq->array[i - 1]; } pSeq->array[0] = x; pSeq->size++; } void Insert(seqlist* pSeq, size_t index, DataType x) { assert(pSeq); assert(index < pSeq->size); assert(pSeq->size < MAX_SIZE); int i = pSeq->size - 1; for (; i >= (int)index; i--) { pSeq->array[i + 1] = pSeq->array[i]; } pSeq->array[index] = x; pSeq->size++; } void Print(seqlist* pSeq) { assert(pSeq); size_t i = 0; for (; i < pSeq->size; i++) { printf("%d ", pSeq->array[i]); } printf(" "); } void PopBack(seqlist* pSeq) { assert(pSeq); pSeq->size--; } void PopFront(seqlist* pSeq) { assert(pSeq); size_t i; for (i = 0; i < pSeq->size; i++) { pSeq->array[i] = pSeq->array[i + 1]; } pSeq->size--; } void Modify(seqlist* pSeq, size_t index, DataType x) { assert(pSeq); assert(index < pSeq->size); pSeq->array[index] = x; } void removed(seqlist* pSeq, size_t index) { assert(pSeq); assert(index < pSeq->size); size_t i = index; for (; i<pSeq->size-1 ; i++) { pSeq->array[i] = pSeq->array[i + 1]; } pSeq->size--; } //返回的值为-1时,找不到此元素;否则返回的值为找到的元素的下标。 int Find(seqlist* pSeq, DataType x, size_t index) { assert(pSeq); int i = index; for (; i < (int)pSeq->size; i++) { if (pSeq->array[i] == x) { return i; } } return -1; } void Erase(seqlist* pSeq, DataType x, Tag all) { assert(pSeq); int ret; ret = Find(pSeq, x, 0); if (ret == -1) { printf("顺序表中没有这个元素 "); } else if (all == one) { removed(pSeq, ret); } else { for (; ret != -1;) { removed(pSeq, ret); ret = Find(pSeq, x, ret); } } } void Test() { seqlist s; Init(&s); PushBack(&s, 1); PushBack(&s, 2); PushBack(&s, 2); PushBack(&s, 2); PushBack(&s, 3); PushBack(&s, 2); PushBack(&s, 4); PushBack(&s, 2); Print(&s); PopBack(&s); Print(&s); PushFront(&s, 5); Print(&s); PopFront(&s); Print(&s); Insert(&s, 0, 24); Print(&s); Modify(&s, 2, 90); Print(&s); removed(&s, 0); Print(&s); Erase(&s, 2, more); Print(&s); } void main() { Test(); }