seqlistd.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef int DataType;
typedef struct SeqListD
{
DataType* _array;
int _size; //有效元素个数
int _capacity; //容量总大小
}SeqListD,*PSeqListD;
void SeqListDInit(PSeqListD ps, int _capacity); //初始化
void SeqListDPushBack(PSeqListD ps, DataType data); //尾插
void SeqListDPopBack(PSeqListD ps); //尾删
void SeqListDInsert(PSeqListD ps, int pos, DataType data); //任意位置插入
void SeqListDErase(PSeqListD ps, int pos); //任意位置删除
int SeqListDSize(PSeqListD ps); //获取元素个数
int SeqListDCapacity(PSeqListD ps); //获取顺序表容量
int SeqListDEmpty(PSeqListD ps); //判空
void SeqListDClear(PSeqListD ps); //将顺序表中的元素清除
int CheckCapacity(PSeqListD ps); //增容
void print(PSeqListD ps); //打印
void SeqListDDestroy(PSeqListD ps); //销毁
seqlistd.c
#include "seqlistd.h"
void SeqListDInit(PSeqListD ps, int _capacity) //初始化
{
if (NULL == ps)
return;
ps->_array = (DataType *)malloc(_capacity * sizeof(DataType));
if (NULL == ps->_array)
{
printf("空间已满,申请空间失败!!!\n");
return;
}
ps->_capacity = _capacity;
ps->_size = 0;
}
void SeqListDPushBack(PSeqListD ps, DataType data) //尾插
{
if (NULL == ps)
return;
if (ps->_size == ps->_capacity)
CheckCapacity(ps);
ps->_array[ps->_size] = data;
ps->_size++;
}
void SeqListDPopBack(PSeqListD ps) //尾删
{
if (NULL == ps)
return;
if (ps->_size == 0)
{
printf("顺序表已空!!!\n");
return;
}
ps->_size--;
}
void SeqListDInsert(PSeqListD ps, int pos, DataType data) //任意位置插入
{
int i = 0;
if (NULL == ps || !(pos >= 0 && pos <= ps->_size))
return;
for (i = ps->_size; i > pos; i--)
{
ps->_array[i] = ps->_array[i - 1]; //把pos到size-1位置的所有元素都后移
}
ps->_array[pos] = data;
ps->_size++;
}
void SeqListDErase(PSeqListD ps, int pos) //任意位置删除
{
int i = pos;
if (NULL == ps)
return;
if (NULL == ps || !(pos >= 0 && pos <= ps->_size))
return;
for (i = pos; i < ps->_size - 1; i++)
{
ps->_array[i] = ps->_array[i + 1];
}
ps->_size--;
}
int SeqListDSize(PSeqListD ps) //元素个数
{
if (NULL == ps)
{
assert(0);
return 0;
}
return ps->_size;
}
int SeqListDCapacity(PSeqListD ps) //容量的大小
{
if (NULL == ps)
{
assert(0);
return 0;
}
return ps->_capacity;
}
int SeqListDEmpty(PSeqListD ps) //判空
{
if (NULL == ps)
{
assert(0);
return -1;
}
if (ps->_size == 0)
return 0;
return 1;
}
void SeqListDClear(PSeqListD ps) //清除
{
if (NULL == ps)
return;
ps->_size = 0;
}
void SeqListDDestroy(PSeqListD ps) //销毁
{
if (NULL == ps)
return;
ps->_size = 0;
ps->_capacity = 0;
free(ps->_array);
ps->_array = NULL; //指针赋空
}
int CheckCapacity(PSeqListD ps) //增容
{
if (NULL == ps)
return 0;
if (ps->_size == ps->_capacity)
{
int NewCapacity = (ps->_capacity) * 2;
ps->_array = (DataType *)realloc(ps->_array, NewCapacity * sizeof(DataType));
if (NULL == ps->_array)
return 0;
ps->_capacity = NewCapacity;
}
return 1;
}
void print(PSeqListD ps) //打印
{
int i = 0;
for (i = 0; i < ps->_size; i++)
{
printf("%d ", ps->_array[i]);
}
printf("\n");
}
test.c
#include "seqlistd.h"
int main()
{
int _capacity = 10;
int _size = 0;
SeqListD List;
PSeqListD ps = &List;
SeqListDInit(ps, _capacity); //初始化
SeqListDPushBack(ps, 5); //尾插
SeqListDPushBack(ps, 6);
SeqListDPushBack(ps, 7);
//SeqListDPopBack(ps); //尾删
//
//SeqListDInsert(ps, 3, 10); //任意位置插入
//SeqListDErase(ps, 3); //任意位置删除
//_size = SeqListDSize(ps); //获取元素个数
//_capacity = SeqListDCapacity(ps); //获取顺序表容量
//printf("_size = %d\n_capacity = %d\n", _size, _capacity);
//SeqListDEmpty(ps); //判空
//SeqListDClear(ps); //将顺序表中的元素清除
//
//SeqListDDestroy(ps); //销毁
//CheckCapacity(ps); //增容
print(ps); //打印顺序表
system("pause");
return 0;
}