###动态顺序表是由静态顺序表演变过来的,唯一的区别在于,动态顺序表可以分配空间,空间不够用时可以增容
##seqlist.h
#ifndef SEQLIST_H_
#define SEQLIST_H_
#include<stdio.h>
#include<malloc.h>
#define CAPACITY 3
typedef int DataType;
typedef struct Seqilst
{
DataType* arr;
int size;
int capacity;
}Seqlist,*pSeqlist;
void InitSeqlist(pSeqlist sq);
void PushBack(pSeqlist sq,DataType data);
int CheckCapacity(pSeqlist sq);
void PopBack(pSeqlist);
void InsertPos(pSeqlist sq,DataType data,int pos);
void ErasePos(pSeqlist sq,int pos);
int IsEmpty(pSeqlist sq);
int Sepsize(pSeqlist sq);
int capacity(pSeqlist sq);
void destroy(pSeqlist sq);
void print(pSeqlist sq);
void test();
#endif
##seqlist.c
#include"seqlist.h"
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
void InitSeqlist(pSeqlist sq) //初始化
{
assert(sq);
sq->arr = (DataType *)malloc(CAPACITY*sizeof(DataType));
if (sq->arr == NULL)
{
printf("capacity faild");
}
else
{
sq->size = 0;
sq->capacity = CAPACITY;
}
}
void PushBack(pSeqlist sq, DataType data)
{
assert(sq);
if (!CheckCapacity(sq))
{
//printf("不需要增容\n");
}
sq->arr[sq->size] = data;
sq->size++;
}
int CheckCapacity(pSeqlist sq)
{
assert(sq);
if (sq->size >= sq->capacity)
{
int newcapacity = (DataType*)malloc(sizeof(DataType)*2 * sq->capacity);//很容易出错
//若严谨考虑的话,此处应该在加sq->arr = ()realloc();
sq->capacity = newcapacity;
}
else
return 0;//不需要增容
return 1;
}
void PopBack(pSeqlist sq)
{
assert(sq);
if (sq->size==0)
return;
sq->size--;
}
void InsertPos(pSeqlist sq, DataType data, int pos)
{
assert(sq);
int end = pos-1;
int i = sq->size-1;
for (; i >= end; i--)
{
sq->arr[i+1] = sq->arr[i];
}
sq->arr[end] = data;
sq->size++;
}
void ErasePos(pSeqlist sq, int pos)
{
assert(sq);
int i = pos - 1;
for (i=pos-1; i < sq->size; i++)
{
sq->arr[i] = sq->arr[i + 1];
}
sq->size--;
}
int IsEmpty(pSeqlist sq)
{
return sq->size == 0;
}
int Sepsize(pSeqlist sq)
{
return sq->size;
}
int capacity(pSeqlist sq)
{
return sq->capacity;
}
void destroy(pSeqlist sq)
{
free(sq->arr);
sq->size = 0;
sq->capacity = 0;
}
void print(pSeqlist sq)
{
int i = 0;
for (; i < sq->size; i++)
{
printf("%d ", sq->arr[i]);
}
printf("\n");
}
##test.c
void test()
{
Seqlist sq;
InitSeqlist(&sq);
PushBack(&sq, 1);
PushBack(&sq, 2);
PushBack(&sq, 3);
PushBack(&sq, 4);
PushBack(&sq, 5);
PushBack(&sq, 6);
print(&sq);
PopBack(&sq);
print(&sq);
InsertPos(&sq, 10, 4);
print(&sq);
ErasePos(&sq, 5);
print(&sq);
}
int main()
{
test();
return 0;
}