★C语言实现静态顺序表的增删改查
#include<stdio.h> #include<assert.h> #include<stdlib.h> #include<string.h> #define Max_size 10 typedef int Datatype; typedef struct Seqlist { Datatype arr[Max_size]; size_t size; Datatype x; }Seqlist; //初始化操作 void init(Seqlist* ptr) { assert(ptr); memset(ptr->arr, 0, sizeof(Datatype)*Max_size); ptr->size = 0; } //尾插 void pushback(Seqlist* ptr,Datatype x) { assert(ptr); if (ptr->size >= Max_size) { printf("Seqlist is full!\n"); return; } ptr->arr[ptr->size++] = x; } //尾删 void popback(Seqlist* ptr) { assert(ptr); if (ptr->size <= 0) { printf("Seqlist is empty!\n"); return; } --ptr->size; } //头插 void pushfront(Seqlist* ptr,Datatype x) { assert(ptr); int begin = ptr->size - 1; if (ptr->size >= Max_size) { printf("Seqlist is full!\n"); return; } ptr->size++; //顺序表空间自增,前一数据元素覆盖后一元素位置,将X存入首位置 for (; begin >= 0; begin--) { ptr->arr[begin+1] = ptr->arr[begin]; } ptr->arr[0] = x; } //头删 void popfront(Seqlist* ptr) { assert(ptr); size_t begin = 0; if (ptr->size <= 0) { printf("Seqlist is empty!\n"); return; } for (begin = 0; begin < ptr->size; begin++) { ptr->arr[begin] = ptr->arr[begin + 1]; } //后一元素覆盖前一元素,最后顺序表空间减一 --ptr->size; } //查找某一元素 int find_one(Seqlist* ptr,Datatype x) { assert(ptr); size_t i = 0; for (; i < ptr->size; i++) { if (ptr->arr[i] == x) { return i; } } return -1; } //删除指定位置元素 void Erase(Seqlist* ptr,size_t pos) { assert(ptr); size_t begin = 0; if (ptr->size <= 0) { printf("Seqlist is empty!\n"); return; } begin = pos - 1; //从pos位置后一元素覆盖前一元素位置,顺序表空间减一 for (; begin < ptr->size; begin++) { ptr->arr[begin] = ptr->arr[begin + 1]; } --ptr->size; } //任意位置插入元素 void Insert(Seqlist* ptr,size_t pos, Datatype x) { assert(ptr); assert(pos); size_t end = ptr->size++; if (ptr->size >= Max_size) { printf("Seqlist is full!\n"); return; } if (pos>ptr->size) { printf("非法插入!\n"); return; } for (; end >= pos - 1; end--) { ptr->arr[end] = ptr->arr[end - 1]; } ptr->arr[pos - 1] = x; } //打印顺序表 void showdata(Seqlist* ptr) { assert(ptr); if (ptr->size == 0) { printf("Seqlist is empty!\n"); return; } for (size_t i = 0; i < ptr->size; i++) { printf("%d ", ptr->arr[i]); } printf("\n"); } //主函数 int main() { Seqlist seq; init(&seq); /*pushback(&seq, 1); popback(&seq); pushfront(&seq, 2);*/ pushback(&seq, 1); pushback(&seq, 2); pushback(&seq, 3); pushback(&seq, 4); pushback(&seq, 5); pushback(&seq, 6); pushback(&seq, 7); pushback(&seq, 8); popfront(&seq); showdata(&seq); int ret = find_one(&seq, 3); printf("%d\n", ret); Erase(&seq, 2); showdata(&seq); Insert(&seq, 2, 5); showdata(&seq); return 0; }