1.头文件:
#pragma once #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int SLDataType; typedef struct SeqList { SLDataType* arr; int size; int capacity; }SL; void SeqListInit(SL* ps); void SeqListCheckCapacity(SL* ps); void SeqListDestroy(SL* ps); void SeqListPushBack(SL* ps, SLDataType x); void SeqListPoptBack(SL* ps, SLDataType x); void SeqListPushFront(SL* ps, SLDataType x); void SeqListPoptFront(SL* ps, SLDataType x); void SeqListPrint(SL* ps); int SeqListFind(SL* ps, SLDataType x); void SepListInsert(SL* ps, int pos, SLDataType x); void SepListDele(SL* ps, int pos);
2.接口的实现:
#include"testSL.h" void SeqListInit(SL* ps) { ps->arr = NULL; ps->size = 0; ps->capacity = 0; } void SeqListCheckCapacity(SL* ps) { if (ps->size == ps->capacity) { int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2; SLDataType* tmp = (SLDataType*)realloc(ps->arr, newcapacity * sizeof(SLDataType)); if (tmp == NULL) { printf("realloc flie\n"); exit(-1); } else { ps->arr = tmp; ps->capacity = newcapacity; printf("增容成功\n"); } } } void SeqListPushBack(SL* ps, SLDataType x) { SeqListCheckCapacity(ps); ps->arr[ps->size] = x; ps->size++; } void SeqListPoptBack(SL* ps, SLDataType x) { SeqListCheckCapacity(ps); ps->size--; } void SeqListDestroy(SL* ps) { free(ps->arr); ps->arr = NULL; } void SeqListPrint(SL* ps) { int i; for (i = 0; i < ps->size; i++) { printf("%d ", ps->arr[i]); } printf("\n"); } void SeqListPushFront(SL* ps, SLDataType x) { int i; int end = ps->size - 1; for (i = 0; i < ps->size; i++) { ps->arr[end + 1 - i] = ps->arr[end - i]; } ps->arr[0] = x; ps->size++; } void SeqListPoptFront(SL* ps, SLDataType x) { int i; int begin = 1; for (i = 0; i < ps->size; i++) { ps->arr[begin - 1 + i] = ps->arr[begin + i]; } ps->size--; } int SeqListFind(SL* ps, SLDataType x) { int i; for (i = 0; i < ps->size; i++) { if (x == ps->arr[i]) { return i; } else if (i == ps->size - 1) { printf("找不到\n"); return -1; } } } void SeqListInsert(SL* ps, int pos, SLDataType x) { SeqListCheckCapacity(ps); if (pos > ps->size || pos < 0) { printf("pos invalid\n"); return; } else { int i; int end = ps->size - 1; for (i = 0; i <= ps->size - pos; i++) { ps->arr[end + 1 - i] = ps->arr[end - i]; } ps->arr[pos] = x; ps->size++; } } void SeqListDele(SL* ps, int pos) { if (pos<0 || pos>ps->size) { printf("pod invalid\n"); return; } else { int i; int begin = pos; for (i = 0; i < ps->size - pos; i++) { ps->arr[begin + i] = ps->arr[begin + 1 + i]; } ps->size--; } }
3.接口测试文件:
#include"testSL.h" void Test() { SL s; int n; SeqListInit(&s); SeqListPushBack(&s, 1); SeqListPushBack(&s, 2); SeqListPushBack(&s, 3); SeqListPushBack(&s, 4); SeqListPushBack(&s, 5); SeqListPushBack(&s, 6); SeqListPushBack(&s, 7); SeqListPushBack(&s, 8); SeqListPushBack(&s, 9); SeqListPushBack(&s, 10); SeqListPoptBack(&s, 10); SeqListPoptBack(&s, 9); SeqListPoptBack(&s, 8); SeqListPushFront(&s, 8); SeqListPushFront(&s, 9); SeqListPushFront(&s, 10); SeqListPoptFront(&s, 10); SeqListPoptFront(&s, 9); SeqListPoptFront(&s, 8); SeqListInsert(&s, 2, 20); SeqListInsert(&s, 3, 30); SeqListInsert(&s, 4, 40); SeqListFind(&s, 20); SeqListFind(&s, 30); SeqListFind(&s, 40); SeqListDele(&s, 40); SeqListDele(&s, 30); SeqListDele(&s, 20); SeqListPrint(&s); SeqListDestroy(&s); } int main() { Test(); return 0; }
4.具体功能实现:
printf("请输入你想要删除的数:"); scanf("%d",&n); int pos = SeqListFind(&s, n); { char ch[10] = { 0 }; if (pos != -1) { printf("找到了,你要删除的数的下标是:%d\n", pos); printf("请问是否需要删除(是/否):"); scanf("%s",&ch); if (0 == strcmp("是", ch)) { SeqListDele(&s, pos); printf("删除成功\n"); } else { printf("删除失败\n"); } } }