test.c
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include "SeqList.h"
void test()
{
SeqList s1;
SeqListInit(&s1);//这里 是函数的调用不用写返回值的
SeqListPushBack(&s1, 1);
SeqListPushBack(&s1, 3);
SeqListPushBack(&s1, 0);
SeqListPushBack(&s1, 4);
SeqListPushBack(&s1, 0);
SeqListPushBack(&s1, 2);
SeqListPushBack(&s1, 1);
SeqListPushBack(&s1, 8);
SeqListPushBack(&s1, 3);
SeqListPrint(&s1);
printf("\n");
//
/*SeqListPushFront(&s1, 9);
SeqListPrint(&s1);
printf("\n");*/
//
SeqListErase(&s1, 3);
SeqListPrint(&s1);
printf("\n");
SeqListInsert(&s1, 3,5);
SeqListPrint(&s1);
//删除
///*SeqListPopBack(&s1);
/*SeqListPopBack(&s1);
SeqListPopBack(&s1);
SeqListPopBack(&s1);
SeqListPopBack(&s1);
SeqListPopBack(&s1);
SeqListPopBack(&s1);
SeqListPopBack(&s1);
SeqListPopBack(&s1);*/
//SeqListPrint(&s1);
/*printf("\n");*/
}
int main()
{
test();
return 0;
}
头文件
SeqList.h
#pragma once
#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
typedef int SLDateType; //方便不同类型的修改
typedef struct SeqList
{
SLDateType* a; //指向动态开辟的数组
int size; //个数
int capacity; //容量
}SeqList;//简化命名
// 对数据的管理:增删查改
//初始化
void SeqListInit(SeqList* ps);
//销毁
void SeqListDestroy(SeqList* ps);
//查容量
void SeqListCheck(SeqList* ps);
//插入数据
void SeqListInsert(SeqList* ps, int pos,SLDateType x);
//删除数据
void SeqListErase(SeqList* ps, int pos);
//打印
void SeqListPrint(SeqList* ps);
//尾cha
void SeqListPushBack(SeqList* ps, SLDateType x);
//头插
void SeqListPushFront(SeqList* ps, SLDateType x);
//头删
void SeqListPopFront(SeqList* ps);
//尾shan
void SeqListPopBack(SeqList* ps);
// 顺序表查找
int SeqListFind(SeqList* ps, SLDateType x);
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* ps, int pos, SLDateType x);
// 顺序表删除pos位置的值
//void SeqListErase(SeqList* ps, int pos);
函数实现
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include "SeqList.h"
//初始化
void SeqListInit(SeqList* ps)
{
ps->a = (SLDateType*)malloc(sizeof(SLDateType)*4);
if (ps->a == NULL)
{
perror("malloc fail");
return;
}
ps->size = 0;
ps->capacity = 4;
}
//销毁
void SeqListDestroy(SeqList* ps)
{
free(ps->a);
ps->a = NULL;
ps->capacity = ps->size = 0;
}
//查容量
void SeqListCheck(SeqList* ps)
{
if (ps->size == ps->capacity)
{
SLDateType* tmp = (SLDateType*)realloc(ps->a, sizeof(SLDateType) * ps->capacity * 2);
if (tmp == NULL)
{
perror("realloc failed");
return;
}
ps->a = tmp;
ps->capacity *= 2;
}
}
//插入数据
void SeqListInsert(SeqList* ps, int pos,SLDateType x)
{
assert(ps);
void SeqListCheck(ps);
if (pos < ps->size)
//这里传入的是地址 不是数字
{
memmove(&ps->a[pos + 1], &ps->a[pos], sizeof(SLDateType) * (ps->size - pos));
ps->a[pos] = x;
}
else { ps->a[pos] = x; }
ps->size++;
}
//删除数据
void SeqListErase(SeqList* ps, int pos)
{
assert(ps->size>0);
if (pos < ps->size - 1)
{
memmove(&ps->a[pos], &ps->a[pos + 1], sizeof(SLDateType) * (ps->size - pos));
//ps->a[pos] = 0;
ps->size--;
}
if(pos==ps->size-1)
{
ps->a[pos] = 0;
ps->size--;
}
}
//尾插
void SeqListPushBack(SeqList* ps, SLDateType x)
{
/*void SeqListCheck(SeqList * ps);
ps->a[ps->size] = x;
ps->size++;*/
SeqListInsert(ps, ps->size, x);
}
//尾删
void SeqListPopBack(SeqList* ps)
{
//检查是否有数据,没有会暴力报错
/*assert(ps->size > 0);
ps->a[ps->size - 1] = 0;
ps->size--;*/
assert(ps);
SeqListErase(ps,ps->size-1);
}
//头插
void SeqListPushFront(SeqList* ps, SLDateType x)
{
SeqListInsert(ps, 0, x);
}
//头删
void SeqListPopFront(SeqList* ps)
{
assert(ps);
SeqListErase(ps, 0);
}
// 顺序表查找
int SeqListFind(SeqList* ps, SLDateType x)
{
assert(ps);
int i=0;
for (i = 0; i < ps->size; i++){
if (ps->a[i] == x)
return i;
}return -1;
}
//打印
void SeqListPrint(SeqList* ps)
{
assert(ps);
int i = 0;
for (i = 0; i < ps->size; i++)
{
printf("%d ", ps->a[i]);
}
}
test.c中代码可以按照需求更改