//SeqList.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int SLDataType;
typedef struct SeqList
{
SLDataType* a;
int size;
int capacity;
}SL;
void SLInit(SL* psl);
void SLDestroy(SL* psl);
void SLprint(const SL* psl);
void SLPushBack(SL* psl, SLDataType x);
void SLPushFront(SL* psl, SLDataType x);
void SLPopBack(SL* psl);
void SLPopFront(SL* psl);
//没有找到就返回-1
int SLFind(SL* psl, SLDataType x);
void SLInsert(SL* psl, size_t pos, SLDataType x);
void SLErase(SL* psl, size_t pos);
void SLCheckCapacity(SL* psl);
void SLModify(SL* psl, size_t pos, SLDataType x);
//SeqList.c
#include"SeqList.h"
//打印
void SLPrint(const SL* psl)
{
assert(psl);
for (int i = 0;i < psl->size;i++)
printf("%d ", psl->a[i]);
printf("\n");
}
//顺序表初始化
void SLInit(SL* psl)
{
assert(psl);
psl->a = NULL;
psl->capacity = psl->size = 0;
}
//顺序表销毁
void SLDestroy(SL* psl)
{
assert(psl);
free(psl->a);
psl->a = NULL;
psl->capacity = psl->size = 0;
}
//顺序表检查容量
void SLCheckCapacity(SL* psl)
{
assert(psl);
if (psl->size == psl->capacity)
{
int newCapcity = psl->capacity + 4;
SLDataType* cmp = (SLDataType*)realloc(psl->a, newCapcity*sizeof(SLDataType));
if (cmp == NULL)
{
perror("realloc fail");
return;
}
psl->a = cmp;
psl->capacity = newCapcity;
}
}
//顺序表尾插
void SLPushBack(SL* psl, SLDataType x)
{
assert(psl);
SLCheckCapacity(psl);
psl->a[psl->size] = x;
psl->size++;
}
//顺序表头插
void SLPushFront(SL* psl, SLDataType x)
{
assert(psl);
SLCheckCapacity(psl);
for(int i = psl->size - 1;i >= 0;i--)
psl->a[i + 1] = psl->a[i];
psl->a[0] = x;
psl->size++;
}
//顺序表头删
void SLPopFront(SL* psl)
{
assert(psl);
assert(psl->size > 0);
for (int i = 1;i < psl->size;i++)
psl->a[i - 1] = psl->a[i];
psl->size--;
}
//顺序表尾删
void SLPopBack(SL* psl)
{
assert(psl);
assert(psl->size > 0);
psl->size--;
}
//顺序表查找元素
int SLFind(SL* psl, SLDataType x)
{
assert(psl);
for (int i = 0;i < psl->size;i++)
{
if (psl->a[i] == x)
return i;
}
return -1;
}
//顺序表插入(重点:注意size_t)
void SLInsert(SL* psl, size_t pos, SLDataType x)
{
assert(psl);
SLCheckCapacity(psl);
for (size_t i = psl->size ;i > pos;i--)
psl->a[i] = psl->a[i-1];
psl->a[pos] = x;
psl->size++;
}
//顺序表删除
void SLErase(SL* psl, size_t pos)
{
assert(psl);
assert(psl->size > 0);
assert(psl->size >= pos + 1);
for (int i = pos;i < psl->size-1;i++)
psl->a[i] = psl->a[i + 1];
psl->size--;
}
//顺序表更改数据
void SLModify(SL* psl, size_t pos, SLDataType x)
{
assert(psl);
assert(pos < psl->size);
psl->a[pos] = x;
}
原文地址:https://www.jb51.cc/wenti/3284608.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。