C语言 顺序表构建

//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;
}

在这里插入图片描述

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...