之前写的动态顺序表是在vs2022中完成的,为了照顾没有vs2022的家人,发布一篇DEV版本
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct {int *arr;int size;int capacity;
}SL;
SL s;
void init(SL* ps)
{ps->arr=NULL;ps->capacity=0;ps->size=0;} void print(SL* ps){int i=0;for(i=0;i<ps->size;i++){printf("%d ",ps->arr[i]);}printf("\n");}void check(SL* ps){int newcapacity=ps->capacity==0?4:2*ps->capacity;if(ps->size==ps->capacity){int* temp=(int*)realloc(ps->arr,sizeof(int)*2*ps->capacity);if(temp==NULL){printf("error\n");exit(-1);}else{ps->arr=temp;ps->capacity=newcapacity;}}}void pushback(SL* ps,int x){check(ps);ps->arr[ps->size]=x;ps->size++;}void pushfront(SL* ps,int x){check(ps);int end=ps->size-1;while(end>=0){ps->arr[end+1]=ps->arr[end];end--;}ps->size++;ps->arr[0]=x;}void deleteback(SL* ps){ps->size--;}void deletefront(SL* ps){int tail=1;while(tail<ps->size){ps->arr[tail-1]=ps->arr[tail];tail++;}ps->size--;}void pushrandom(SL* ps,int index,int x){assert(index<=ps->size);check(ps);int end=ps->size;while(end>index){ps->arr[end]=ps->arr[end-1];end--;}ps->arr[index]=x;ps->size++;}void deleterandom(SL* ps,int index){assert(index<ps->size);int begin =index;while(begin<=ps->size-1){ps->arr[begin]=ps->arr[begin+1];begin++;}ps->size--;}void updata(SL* ps,int index,int x){ps->arr[index]=x;}void test(){init(&s);pushback(&s,2);pushback(&s,1);pushback(&s,1);pushfront(&s,5);pushfront(&s,8);pushfront(&s,9);print(&s); deleteback(&s);deleteback(&s);deletefront(&s);deletefront(&s);print(&s);pushrandom(&s,1,5);print(&s);pushrandom(&s,1,9);print(&s);pushrandom(&s,1,8);print(&s);pushrandom(&s,1,2);print(&s);pushrandom(&s,1,3);print(&s);deleterandom(&s,1);print(&s);deleterandom(&s,1);print(&s);deleterandom(&s,1);print(&s);deleterandom(&s,1);print(&s);deleterandom(&s,1);print(&s);updata(&s,0,2);print(&s);}int main(){test();free(s.arr);return 0;}