#include<stdio.h>
#include<string.h>
#include<assert.h>
#define MAX_SIZE 1000
typedef unsigned int size_t;
typedef int DataType;
typedef struct
{
DataType arr[MAX_SIZE];
int _size;
}Seqlist,*PSeqList;
void SeqListInit(PSeqList ps);//初始化
void SeqListPushBack(PSeqList ps, DataType data);//尾部插入
void SeqListPopBack(PSeqList ps);//尾部删除
void SeqListPushFront(PSeqList ps, DataType data);//头部插入
void SeqListPopFront(PSeqList ps);//头部删除
void SeqListInsert(PSeqList ps, size_t pos, DataType data);//指定位置插入
void SeqListErase(PSeqList ps, size_t pos);//指定位置删除
int SeqListFind(PSeqList ps, DataType data);//查询元素
void SeqListRemove(PSeqList ps, DataType data);//删除指定元素
void SeqListRemoveAll(PSeqList ps, DataType data);//删除所有指定元素
int SeqListEmpty(PSeqList ps);//判断顺序表是否为空
int SeqListSize(PSeqList ps);//返回顺序表大小
#include"SeqList.h"
int PrintSeqList(PSeqList ps)
{
assert(ps);
int i = 0;
for (i = 0; i < ps->_size; i++)
{
printf("%d", ps->arr[i]);
}
printf("\n");
}
void SeqListInit(PSeqList ps)//初始化
{
if (NULL == ps)
return;
ps->_size = 0;
}
void SeqListPushBack(PSeqList ps, DataType data)//尾部插入
{
assert(ps);
if (NULL == ps)
return;
if (ps->_size == MAX_SIZE)
return;
ps->arr[ps->_size++] = data;
}
void SeqListPopBack(PSeqList ps)//尾部删除
{
assert(ps);
if (NULL == ps)
return;
ps->_size--;
}
void SeqListPushFront(PSeqList ps, DataType data)//头部插入
{
assert(ps);
if (ps->_size == MAX_SIZE)
{
printf("表已满,不能插入\n");
return;
}
else
{
int i = 0;
for (i = ps->_size; i > 0; --i)
{
ps->arr[i] = ps->arr[i - 1];
}
ps->arr[0] = data;
ps->_size++;
}
}
void SeqListPopFront(PSeqList ps)//头部删除
{
assert(ps);
if (NULL == ps)
return;
else
{
int i = 0;
for (i = 0; i < ps->_size ;i++)
{
ps->arr[i] = ps->arr[i+1];
}
ps->_size--;
}
}
void SeqListInsert(PSeqList ps, size_t pos, DataType data)//指定位置插入
{
assert(ps);
if (pos > ps->_size)
return;
if (ps->_size==MAX_SIZE)
{
printf("表已满不能插入\n");
return;
}
else
{
int i = 0;
for (i = ps->_size - 1; i > pos; i--)
{
ps->arr[i] = ps->arr[i - 1];
}
ps->arr[pos] = data;
ps->_size++;
}
}
void SeqListErase(PSeqList ps, size_t pos)//指定位置删除
{
int i = 0;
assert(ps);
if (NULL == ps)
return;
else
{
for (i = pos; i < ps->_size ; i++)
{
ps->arr[i] = ps->arr[i+1];
}
ps->_size--;
}
}
int SeqListFind(PSeqList ps, DataType data)//查询
{
assert(ps);
int i = 0;
for (i = 0; i < ps->_size; i++)
{
if (data == ps->arr[i])
return i;
}
return -1;
}
void SeqListRemove(PSeqList ps, DataType data)//删除指定元素
{
SeqListErase(ps, SeqListFind(ps, data));
}
void SeqListRemoveAll(PSeqList ps, DataType data)
{
int count = 0, i = 0;
assert(ps);
for (i=0; i < ps->_size; i++)
{
if (ps->arr[i] == data)
count++;
else
ps->arr[i - count] = ps->arr[i];
}
ps->_size -= count;
}
int SeqListEmpty(PSeqList ps)//判断顺序表是否为空
{
assert(ps);
return 0 == ps->_size;
}
int SeqListSize(PSeqList ps)//返回顺序表大小
{
assert(ps);
return ps->_size;
}
#include"SeqList.h"
int main()
{
Seqlist ps;
SeqListInit(&ps);
SeqListPushBack(&ps, 1);
SeqListPushBack(&ps, 2);
SeqListPushBack(&ps, 3);
SeqListPushBack(&ps, 4);
SeqListPushBack(&ps, 5);
SeqListPushBack(&ps, 5);
printf("size=%d\n", ps._size);
//SeqListPushBack(&ps, 3);
//PrintSeqList(&ps);
//SeqListPopBack(&ps);
//PrintSeqList(&ps);
//SeqListPushFront(&ps, 3);
//PrintSeqList(&ps);
//SeqListPopFront(&ps);
//PrintSeqList(&ps);
//SeqListInsert(&ps,2,3);
//SeqListErase(&ps, 2);
//SeqListFind(&ps, 2);
//SeqListRemove(&ps,3);
//SeqListRemoveAll(&ps,2);
//SeqListEmpty(&ps);
//SeqListSize(&ps);
PrintSeqList(&ps);
return 0;
}