seqlist.h
#pragma once
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
typedef int DataType;
typedef struct SeqList
{
DataType* array; //数据块指针
size_t size; //当前有效数据个数
size_t capacity; //容量
}SeqList,*PsSeqList;
void SeqListInit(PsSeqList ps,int capacity); //初始化链表
void CheckCapacity(PsSeqList ps); //对顺序表表进行增容
void SeqListpushback(PsSeqList ps, DataType data); //尾插
void SeqListpopback(PsSeqList ps); //尾删
void SeqListInsert(PsSeqList ps, int pos, DataType data); //任意位置插入
void SeqListErase(PsSeqList ps, int pos); //任意位置删除
int SeqListSize(PsSeqList ps); //顺序表元素的个数
int SeqListcapacity(PsSeqList ps); //顺序表的容量
int SeqListEmpty(PsSeqList ps); //判空返回值为 0
void SeqListClear(PsSeqList ps); //将顺序表中元素清空 但是不改变顺序表的容量
void SeqListDestory(PsSeqList); //销毁一个顺序表
void SeqListprint(PsSeqList ps); //打印结果
seqlist.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "seqlist.h"
void SeqListInit(PsSeqList ps, int capacity)
{
if (NULL == ps)
return;
ps->array = (DataType*)malloc(sizeof(DataType)*capacity);
if (NULL == ps->array)
{
printf("申请失败");
return;
}
ps->capacity = capacity;
ps->size = 0;
}
void CheckCapacity(PsSeqList ps)
{
if (NULL == ps)
return;
ps->array = (DataType*)realloc(ps->array, sizeof(DataType)* (ps->capacity) * 2);
if (NULL == ps->array)
{
printf("申请失败");
return;
}
ps->capacity = (ps->capacity) * 2;
}
void SeqListpushback(PsSeqList ps, DataType data)
{
if (NULL == ps)
return;
if (ps->size >= ps->capacity)
CheckCapacity(ps);
ps->array[ps->size] = data;
ps->size++;
}
void SeqListpopback(PsSeqList ps)
{
if (NULL == ps)
return;
if (ps->size == 0)
{
printf("链表以空!!!");
return;
}
ps->size--;
}
void SeqListInsert(PsSeqList ps, int pos, DataType data)
{
if (NULL == ps)
return;
if (ps->size >= ps->capacity)
CheckCapacity(ps);
int i = ps->size;
for (; i >= pos; i--)
{
ps->array[i+1] = ps->array[i];
}
++ps->size;
ps->array[pos] = data;
}
void SeqListErase(PsSeqList ps, int pos)
{
if (NULL == ps)
return;
if (ps->size == 0)
{
printf("链表以空!!!");
return;
}
int i = ps->size;
for (; i > pos; i--)
{
ps->array[i] = ps->array[i + 1];
}
ps->size--;
}
int SeqListSize(PsSeqList ps)
{
if (NULL == ps)
{
assert(0);
return 0;
}
return ps->size;
}
int SeqListcapacity(PsSeqList ps)
{
int i = ps->capacity;
return i;
}
int SeqListEmpty(PsSeqList ps)
{
if (NULL == ps)
{
assert(0);
return -1;
}
if (0 == ps->size)
return 0;
return 1;
}
void SeqListClear(PsSeqList ps)
{
if (NULL == ps)
return;
ps->size = 0;
}
void SeqListDestory(PsSeqList ps)
{
if (NULL == ps)
return;
ps->size = 0;
ps->capacity = 0;
free(ps->array);
ps->array = NULL;
}
void SeqListprint(PsSeqList ps)
{
if (NULL == ps)
return;
int i = 0;
for (; i < ps->size; i++)
{
printf("%d->",ps->array[i]);
}
printf("\n");
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
//#include<assert.h>
#include "seqlist.h"
void test()
{
SeqList List;
PsSeqList ps = &List;
SeqListInit(ps, 20);
SeqListprint(ps);
CheckCapacity(ps);
SeqListprint(ps);
SeqListpushback(ps, 1);
SeqListpushback(ps, 2);
SeqListpushback(ps, 3);
SeqListpushback(ps, 4);
SeqListpushback(ps, 5);
SeqListprint(ps);
SeqListpopback(ps);
SeqListprint(ps);
SeqListInsert(ps, 3, 2);
SeqListprint(ps);
SeqListErase(ps,4);
SeqListprint(ps);
SeqListSize(ps);
SeqListcapacity(ps);
SeqListEmpty(ps);
SeqListClear(ps);
SeqListDestory(ps);
}
int main()
{
test();
int capacity = 10;
system("pause");
return 0;
}