#pragma once
#include <assert.h>
#include <stdio.h>
typedef int DataType;
#define MAX_SIZE (100)
typedef struct SeqList{
DataType array[MAX_SIZE];
int size;
}SeqList;
//初始化
void SeqListInit(SeqList *pSL);
//销毁
void SeqListDestroy(SeqList *pSL);
//增、删、改、查
//增
//尾插
void SeqListPushBack(SeqList *pSL, DataType data);
//头插
void SeqListPushBack(SeqList *pSL, DataType data);
//根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data);
//删
//尾删
void SeqListPopBack(SeqList *pSL);
//头删
void SeqListPopFront(SeqList *pSL);
//根据下标删除
void SeqListErase(SeqList *pSL);
//根据数据删除,只删除遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data);
//查询
//返回遇到的第一个下标,如果没有遇到,则返回-1
int SeqListFind(SeqList *pSL, DataType data);
//根据下标更新
void SeqListUpdate(SeqList *pSL, int pos, DataType data);
//初始化
void SeqListInit(SeqList *pSL)
{
assert(pSL != NULL);
pSL->size = 0;
}
//销毁
void SeqListDestroy(SeqList *pSL)
{
assert(pSL != NULL);
pSL->size = 0;
}
//尾插
void SeqListPushBack(SeqList *pSL, DataType data)
{
assert(pSL != NULL);
assert(pSL->size < MAX_SIZE);
pSL->array[pSL->size] = data;
pSL->size++;
}
//头插
void SeqListPushFront(SeqList *pSL, DataType data)
{
assert(pSL != NULL);
assert(pSL->size < MAX_SIZE);
//1.以要搬移的数作为循环的指示
int pos;
for (pos = pSL->size - 1; pos>=0; pos--)
{
pSL->array[pos + 1] = pSL->array[pos];
}
pSL->array[0] = data;
pSL->size++;
}
//根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data)
{
assert(pSL != NULL);
assert(pSL->size < MAX_SIZE);
assert(pos >= 0 && pos <= pSL->size);
int space;
for (space = pSL->size; space>pos; space--)
{
pSL->array[space] = pSL->array[space - 1];
}
pSL->array[pos] = data;
pSL->size++;
}
//删
//尾删
void SeqListPopBack(SeqList *pSL)
{
pSL->size--;
}
//头删
void SeqListPopFront(SeqList *pSL)
{
assert(pSL != NULL);
int pos;
for (pos = 0; pos < pSL->size-1; pos++)
{
pSL->array[pos] = pSL->array[pos + 1];
}
pSL->size--;
}
//根据下标删除
void SeqListErase(SeqList *pSL, int pos)
{
assert(pSL != NULL);
assert(pos >= 0 && pos < pSL->size);
int node;
for (node = pos; node < pSL->size - 1; node++)
{
pSL->array[node] = pSL->array[node + 1];
}
pSL->size--;
}
//查询
int SeqListFind(SeqList *pSL, DataType data)
{
assert(pSL != NULL);
int i;
for (i = 0; i < pSL->size - 1; i++)
{
if (pSL->array[i] == data)
{
return i;
}
}
return -1;
}
//根据数据删除
void SeqListRemove(SeqList *pSL, DataType data)
{
int pos = SeqListFind(pSL, data);
if (pos != -1) {
// 如果找到了
SeqListErase(pSL, pos);
}
}
//根据下标更新
void SeqListUpdate(SeqList *pSL, int pos, DataType data)
{
assert(pSL != NULL);
assert(pos >= 0 && pos < pSL->size - 1);
pSL->array[pos] = data;
}
//打印函数
void SeqListPrint(SeqList *pSL)
{
int i;
for (i = 0; i < pSL->size; i++) {
printf("%d ", pSL->array[i]);
}
printf("\n");
}
void TestSeqList()
{
SeqList sl;
SeqListInit(&sl);
SeqListPushBack(&sl, 1);
SeqListPushBack(&sl, 2);
SeqListPushBack(&sl, 3);
SeqListPushBack(&sl, 4);
//SeqListPushFront(&sl, 0);
//SeqListPushFront(&sl, -1);
//SeqListInsert(&sl,2,2);
//SeqListPopBack(&sl);
//SeqListPopFront(&sl);
//SeqListPopFront(&sl);
//SeqListErase(&sl, 4);
//SeqListRemove(&sl, 2);
SeqListUpdate(&sl,1,6);
SeqListPrint(&sl);
}
用typedef int DataType; 对int 进行重命名。
定义一个结构体,结构体中参数为,一个DataType型的数组,一个DataType型的size,
数组中存放数据,size表示数组的长度。