拿出来我之前以及写好了的顺序表的代码:
#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int SLDataType;
typedef struct SeqList
{
SLDataType* arr;//
int size; // 有效数据个数
int capacity; // 空间容量
}SL;
void SLInit(SL* ps);//初始化
void SLDestroy(SL* ps);//销毁
void SLPrint(SL* ps);//测试
void SLCheckCapacity(SL* ps);//扩容
void SLPushBack(SL* ps, SLDataType x);// 尾部插入
void SLPopBack(SL* ps); //尾部删除
void SLPushFront(SL* ps, SLDataType x);//头部插入
void SLPopFront(SL* ps);//头部删除
void SLInsert(SL* ps, int pos, SLDataType x); // 指定位置之前插入数据
void SLErase(SL* ps, int pos);//指定位置之前删除数据
int SLFind(SL* ps, SLDataType x);//指定位置查找数据
#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqLisr.h"
//初始化
void SLInit(SL *ps) {
ps->arr = NULL;
ps->capacity = ps->size = 0;
}
//销毁
void SLDestroy(SL* ps) {
assert(ps);
if (ps->arr) {
free(ps->arr);
}
ps->arr = NULL;
ps->capacity = ps->size = 0;
}
//扩容
void SLCheckCapacity(SL* ps) {
if (ps->size == ps->capacity) {
int newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;
SLDataType* tmp = (SLDataType*)realloc(ps->arr, newcapacity * sizeof(SLDataType));
if (tmp == NULL) {
perror("tmp");
exit(1);
}
ps->arr = tmp;
ps->capacity = newcapacity;//把他变成扩容之后的新内存
}
}
// 尾部插入
void SLPushBack(SL* ps, SLDataType x){
assert(ps);
//空间不够,扩容
SLCheckCapacity(ps);
//空间足够,直接插入
ps->arr[ps->size] = x;
ps->size++;
}
//测试打印
void SLPrint(SL* ps) {
for (int i = 0; i < ps->size; i++) {
printf("%d ", ps->arr[i]);
}
printf("\n");
}
//头部插入
void SLPushFront(SL* ps, SLDataType x) {
assert(ps);