当前位置: 首页 > news >正文

[数据结构] 动态顺序表应用

可扩容顺序表顺序表

  • SeqList.h
  • SeqList.c
  • Test.c

动态顺序表能够根据数据存储的需要动态地管理内存空间。

SeqList.h

#include<stdio.h>
#include<stdlib.h>

//静态顺序表
//小了不够用,多了浪费
//#define N 10
//typedef int SLDatatype;
//struct SeqList
//{
//	SLDatatype a[N];
//	int size;
//
//};

typedef int SLDatatype;
typedef struct SeqList
{
	SLDatatype* a;
	int size;//数据个数
	int capacity;//容量
}SL;
void SLInit(SL* psl);
void SLDestory(SL* psl);
void SLPrint(SL* psl);
void SLPushBack(SL* psl, SLDatatype x);
void SLPushFront(SL* psl, SLDatatype x);
void SLPopBack(SL* psl);
void SLPopBack(SL* psl);

SeqList.c

#include"SeqList.h"

void SLInit(SL *psl) {
	psl->a = (SLDatatype*)malloc(sizeof(SLDatatype) * 4);
	if (psl->a == NULL) {
		perror("malloc fail");
		return 0;
	}
	psl->capacity = 4;
	psl->size = 0;
}

void SLDestory(SL* psl) {
	free(psl->a);
	psl->a = NULL;
	psl->size = 0;
	psl->capacity = 0;
}

void SLPrint(SL* psl) {
	for (int i = 0; i < psl->size; i++) {
		printf("%d ", psl->a[i]);
	}
	printf("\n");
}

void SLCheckCapacity(SL* psl) {
	if (psl->size == psl->capacity) {
		SLDatatype* tmp = realloc(psl->a, sizeof(SLDatatype) * psl->capacity * 2);
		if (tmp == NULL) {
			perror("realloc fail");
			return 0;
		}
		psl->a = tmp;
		psl->capacity *= 2;
	}
}

void SLPushBack(SL* psl, SLDatatype x) {//尾部数据插入
	SLCheckCapacity(psl);
	psl->a[psl->size] = x;
	psl->size++;
	
}
void SLPushFront(SL* psl, SLDatatype x);
void SLPopBack(SL* psl);
void SLPopBack(SL* psl);

Test.c

#include"SeqList.h"
int main() {
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPushBack(&s, 6);
	SLPushBack(&s, 6);
	SLPushBack(&s, 6);
	SLPushBack(&s, 6);
	SLPrint(&s);

	SLDestory(&s);
	return 0;
}

相关文章:

  • CSS+JS 堆叠图片动态交互切换
  • Opencv计算机视觉编程攻略-第三节 图像颜色处理
  • 【docker】docker-compose安装RabbitMQ
  • 08-项目中不可控的任务如何安排和验收
  • WPF(Windows Presentation Foundation)与 C# 基础知识详解
  • 【Linux知识】RPM软件包安装命令行详细说明
  • 代码随想录Day23
  • [ComfyUI] AlekPetNodes 插件详解:节点与模型管理
  • 2小样本学习(Few-Shot)之相似度
  • 000-JMeter简介
  • JVM之类的加载过程
  • 硬件基础--02_前序知识
  • 【C++】STL性能优化实战
  • 硬件基础(3):三极管(4):关于三极管的压降
  • 诡异的服务重启原因探索
  • 【AWS】使用CloudFront S3 Lambda打造丝滑低延迟Web体验
  • Java面试题及知识点Day1
  • 【构建性能分析插件设计与实现:打造前端项目的性能透视镜】
  • 初阶5 STL简介
  • 嵌入式硬件开发中如何将对应的EDA文件导入PADS方法
  • 33岁改行做网站建设/100个电商平台
  • 外贸常用网站有哪些/郑州关键词网站优化排名
  • web是做网站的吗/免费b2b平台推广
  • 网站自己做需要多少钱/91永久海外地域网名
  • 中山手机网站建设/网络营销的传播手段
  • 推广自己的店铺推广语/搜索引擎优化的内容包括