SeqList.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <windows.h>
#define MAX_SIZE (100)
// 值类型
typedef int DataType;
typedef struct SeqList {
DataType array[MAX_SIZE];
int size; // 数量
} SeqList;
void SeqListInit(SeqList *pSL); //初始化
void SeqListPushBack(SeqList *pSL, DataType data); //尾部插入
void SeqListPushFront(SeqList *pSL, DataType data); // 头部插入
void SeqListPopBack(SeqList *pSL); // 尾部删除
void SeqListPopFront(SeqList *pSL); // 头部删除
void SeqListInsert(SeqList *pSL, int pos, DataType data); // 按下标插入,pos 的范围是 [0, size]
void SeqListErase(SeqList *pSL, int pos); // 按下标删除,pos 的范围是 [0, size)
void SeqListRemove(SeqList *pSL, DataType data); // 按值删除,只删遇到的第一个
void SeqListRemoveAll(SeqList *pSL, DataType data); // 按值删除,删除所有的
void SeqListClear(SeqList *pSL); // 清空
int SeqListFind(SeqList *pSL, DataType data); // 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListEmpty(SeqList *pSL); // 判断是否为空,1 表示空, 0 表示不空
int SeqListSize(SeqList *pSL); // 返回数量
void SeqListDestroy(SeqList *pSL); // 销毁
void SeqListPrint(SeqList *pSL);
#endif
test.c
#include "SeqList.h"
// 初始化
void SeqListInit(SeqList *pSL)
{
assert(pSL != NULL);
pSL->size = 0;
}
// 尾部插入
void SeqListPushBack(SeqList *pSL, DataType data)
{
pSL->array[pSL->size] = data;
pSL->size += 1;
//SeqListInsert(pSL,pSL->size,data);
}
// 头部插入
void SeqListPushFront(SeqList *pSL, DataType data)
{
int i = 0;
for (i = pSL->size; i >= 1; i--)
{
pSL->array[i] = pSL->array[i - 1];
}
pSL->array[0] = data;
pSL->size += 1;
//SeqListInsert(pSL,0,data);
}
// 尾部删除
void SeqListPopBack(SeqList *pSL)
{
assert(pSL!=NULL);
assert(pSL->size>0);
pSL->size--;
//SeqListErase(pSL,pSl->size-1);
}
// 头部删除
void SeqListPopFront(SeqList *pSL)
{
int i = 0;
assert(pSL!=NULL);
assert(pSL->size>0);
pSL->size--;
for (i = 0; i < pSL->size; i++)
{
pSL->array[i] = pSL->array[i + 1];
}
//SeqListErase(pSL,0);
}
// 按下标插入,pos 的范围是 [0, size]
void SeqListInsert(SeqList *pSL, int pos, DataType data)
{
int i = 0;
for (i = 0; i < pSL->size - pos; i++)
{
pSL->array[pSL->size-i] = pSL->array[pSL->size-i-1];
}
pSL->array[pos] = data;
pSL->size++;
}
// 按下标删除,pos 的范围是 [0, size)
void SeqListErase(SeqList *pSL, int pos)
{
int i = 0;
assert(pSL!=NULL);
assert(pSL->size>0);
pSL->size--;
for (i = 0; i < pSL->size - pos; i++)
{
pSL->array[pos+i] = pSL->array[pos+i+1];
}
}
// 按值删除,只删遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data)
{
int index = SeqListFind(pSL, data);
if (index != -1)
{
SeqListErase(pSL, index);
}
}
// 按值删除,删除所有的
void SeqListRemoveAll(SeqList *pSL, DataType data)
{
int i = 0;
int j = 0;
int count = 0;
DataType *newArray;
newArray = (DataType *)malloc(pSL->size*sizeof(DataType));
assert(newArray);
for (i = 0; i < pSL->size; i++)
{
if (pSL->array[i] == data)
{
count++;
}
else
{
newArray[j] = pSL->array[i];
j++;
}
}
pSL->size -= count;
for (i = 0; i < pSL->size; i++)
{
pSL->array[i] = newArray[i];
}
free(newArray);
}
// 清空
void SeqListClear(SeqList *pSL)
{
pSL->size = 0;
}
// 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListFind(SeqList *pSL, DataType data)
{
int i = 0;
for (i = 0; i < pSL->size; i++)
{
if (pSL->array[i] == data)
return i;
}
return -1;
}
// 判断是否为空,1 表示空, 0 表示不空
int SeqListEmpty(SeqList *pSL)
{
return pSL->size == 0 ? 1 : 0;
}
// 返回数量
int SeqListSize(SeqList *pSL)
{
return pSL->size;
}
// 销毁
void SeqListDestroy(SeqList *pSL)
{
assert(pSL!=NULL);
pSL->size = 0;
}
void SeqListPrint(SeqList *pSL)
{
int i = 0;
for (i = 0; i < pSL->size; i++)
{
printf("%d ",pSL->array[i]);
}
printf("\n");
}
int main()
{
SeqList sl;
SeqListInit(&sl);
SeqListPushBack(&sl, 1);
SeqListPushBack(&sl, 2);
SeqListPushBack(&sl, 3);
SeqListPushBack(&sl, 4);
SeqListPrint(&sl);
SeqListErase(&sl,2);
SeqListPrint(&sl);
system("pause");
return 0;
}