#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int SLDataType;
typedef struct SeqList
{
SLDataType* a;
int size;
int capacity;
}SL;
void SLInit(SL* psl);
void SLDestroy(SL* psl);
void SLprint(const SL* psl);
void SLPushBack(SL* psl, SLDataType x);
void SLPushFront(SL* psl, SLDataType x);
void SLPopBack(SL* psl);
void SLPopFront(SL* psl);
int SLFind(SL* psl, SLDataType x);
void SLInsert(SL* psl, size_t pos, SLDataType x);
void SLErase(SL* psl, size_t pos);
void SLCheckCapacity(SL* psl);
void SLModify(SL* psl, size_t pos, SLDataType x);
#include"SeqList.h"
void SLPrint(const SL* psl)
{
assert(psl);
for (int i = 0;i < psl->size;i++)
printf("%d ", psl->a[i]);
printf("\n");
}
void SLInit(SL* psl)
{
assert(psl);
psl->a = NULL;
psl->capacity = psl->size = 0;
}
void SLDestroy(SL* psl)
{
assert(psl);
free(psl->a);
psl->a = NULL;
psl->capacity = psl->size = 0;
}
void SLCheckCapacity(SL* psl)
{
assert(psl);
if (psl->size == psl->capacity)
{
int newCapcity = psl->capacity + 4;
SLDataType* cmp = (SLDataType*)realloc(psl->a, newCapcity*sizeof(SLDataType));
if (cmp == NULL)
{
perror("realloc fail");
return;
}
psl->a = cmp;
psl->capacity = newCapcity;
}
}
void SLPushBack(SL* psl, SLDataType x)
{
assert(psl);
SLCheckCapacity(psl);
psl->a[psl->size] = x;
psl->size++;
}
void SLPushFront(SL* psl, SLDataType x)
{
assert(psl);
SLCheckCapacity(psl);
for(int i = psl->size - 1;i >= 0;i--)
psl->a[i + 1] = psl->a[i];
psl->a[0] = x;
psl->size++;
}
void SLPopFront(SL* psl)
{
assert(psl);
assert(psl->size > 0);
for (int i = 1;i < psl->size;i++)
psl->a[i - 1] = psl->a[i];
psl->size--;
}
void SLPopBack(SL* psl)
{
assert(psl);
assert(psl->size > 0);
psl->size--;
}
int SLFind(SL* psl, SLDataType x)
{
assert(psl);
for (int i = 0;i < psl->size;i++)
{
if (psl->a[i] == x)
return i;
}
return -1;
}
void SLInsert(SL* psl, size_t pos, SLDataType x)
{
assert(psl);
SLCheckCapacity(psl);
for (size_t i = psl->size ;i > pos;i--)
psl->a[i] = psl->a[i-1];
psl->a[pos] = x;
psl->size++;
}
void SLErase(SL* psl, size_t pos)
{
assert(psl);
assert(psl->size > 0);
assert(psl->size >= pos + 1);
for (int i = pos;i < psl->size-1;i++)
psl->a[i] = psl->a[i + 1];
psl->size--;
}
void SLModify(SL* psl, size_t pos, SLDataType x)
{
assert(psl);
assert(pos < psl->size);
psl->a[pos] = x;
}