#include<stdio.h>
#include<assert.h>
#include<malloc.h>
#include<stdlib.h>
typedef int SLDataType;
//可更改方便数据类型的动态数据表
//静态顺序表
typedef struct SeqList1 {
int array[100]; //容量100
int size; //顺序表中有效数据
} SeqList1;
//动态顺序表
typedef struct SeqList2 {
int* array; //指向堆上空间,存放数据
int capacity; //容量
int size; //顺序表中有效数据
} SeqList2;
typedef struct SeqList3 {
SLDataType* array; //指向堆上空间,存放数据
int capacity; //容量
int size; //顺序表中有效数据
} SeqList3;
//初始化
void SeqListInit(SeqList3* pseqlist)
{
//判断地址不为空
assert(pseqlist != NULL);
//设置容量
pseqlist->capacity = 10;
//开辟空间
pseqlist->array = (SLDataType*)malloc(sizeof(SLDataType) * pseqlist->capacity);
pseqlist->size = 0;
}
//销毁
void SeqListDestroy(SeqList3* pseqlist)
{
//释放空间
free(pseqlist->array);
pseqlist->array = NULL;
pseqlist->capacity = 0;
pseqlist->size = 0;
}
//扩容
void CheckCapacity(SeqList3* ps)
{
if (ps->capacity > ps->size)
{
return;
}
//一般来说,扩容大小是原空间的2倍
int newCapacity = ps->capacity * 2;
//申请新的空间
SLDataType* newArray = (SLDataType*)malloc(sizeof(SLDataType) * newCapacity);
assert(newArray);
//搬家
for (int i = 0; i < ps->size; i++)
{
newArray[i] = ps->array[i];
}
//释放老空间,绑定新空间
free(ps->array);
ps->array = newArray;
ps->capacity = newCapacity;
}
//插入
//尾插
void SeqListPushBack(SeqList3* pseqlist, SLDataType value)
{
pseqlist->array[pseqlist->size] = value;
pseqlist->size++;
}
//头插
void SeqListPushFront(SeqList3* pseqlist, SLDataType value)
{
int i = 0;
for (i = pseqlist->size; i > 0; i--)
{
pseqlist->array[i] = pseqlist->array[i - 1];
}
pseqlist->array[0] = value;
pseqlist->size++;
}
//中间插入
void SeqListInsert(SeqList3* pseqlist, int pos, SLDataType value)
{
int i = 0;
for (i = pseqlist->size; i > pos; i--)
{
pseqlist->array[i] = pseqlist->array[i - 1];
}
pseqlist->array[pos] = value;
pseqlist->size++;
}
//尾删
void SeqListPopFront(SeqList3* pseqlist)
{
pseqlist->size--;
}
//头删
void SeqListPopBack(SeqList3* pseqlist)
{
int i = 0;
for (i = 0; i < pseqlist->size-1; i++)
{
pseqlist->array[i] = pseqlist->array[i + 1 ];
}
pseqlist->size--;
}
//中间删
void SeqListErase(SeqList3* pseqlist, int pos)
{
int i = 0;
for (i = pos; i < pseqlist->size - 1; i++)
{
pseqlist->array[i] = pseqlist->array[i + 1];
}
pseqlist->size--;
}
//查找
int SeqlistSearch(const SeqList3* ps, SLDataType value)
{
int i = 0;
for (i = 0; i < ps->size; i++)
{
if (ps->array[i] == value)
{
return i;
}
}
return -1;
}
//修改
void SeqListModify(SeqList3* ps, int pos, SLDataType value)
{
ps->array[pos] = value;
}
//打印顺序表
void SeqListprint(SeqList3* ps)
{
int i = 0;
for (i = 0; i < ps->size; i++)
{
printf("%d ", ps->array[i]);
}
printf("\n");
}
int main()
{
SeqList3 seqlist;
SeqListInit(&seqlist);
SeqListPushFront(&seqlist, 1);
SeqListprint(&seqlist);
SeqListPushFront(&seqlist, 2);
SeqListprint(&seqlist);
SeqListPushFront(&seqlist, 3);
SeqListprint(&seqlist);
SeqListPushFront(&seqlist, 4);
SeqListprint(&seqlist);
SeqListPushBack(&seqlist, 5);
SeqListprint(&seqlist);
SeqListInsert(&seqlist, 3, 6);
SeqListprint(&seqlist);
SeqListPopFront(&seqlist);
SeqListprint(&seqlist);
SeqListPopBack(&seqlist);
SeqListprint(&seqlist);
SeqListErase(&seqlist, 1);
SeqListprint(&seqlist);
SeqlistSearch(&seqlist, 1);
SeqListprint(&seqlist);
SeqListModify(&seqlist, 1, 0);
SeqListprint(&seqlist);
SeqListDestroy(&seqlist);
}