顺序表的动态分配基本操作

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


// 顺序表存储空间动态分配
#define InitSize 10      // 顺序表初始长度
typedef int ElemType;   // int类型重命名为ElemType,方便后续调整

typedef struct {        // 定义结构体
	ElemType *data;     // 用静态的数组存放数据元素
	ElemType MaxSize;   // 顺序表最大容量
	ElemType length;    // 顺序表数据长度
} SqList;
void PrintList(SqList L);

// 初始化顺序表
void InitList(SqList &L) {
	// 用malloc函数申请一片连续的存储空间
	L.data = (ElemType *) malloc(InitSize * sizeof(ElemType));
	L.MaxSize = InitSize;
	L.length = 0;
}



//按位插入
int InsertList(SqList &L, int i, int e) {
	if (i < 1 || i > L.length || L.length == L.MaxSize)
		return 0;

	for (int j = L.length; j >= i; j--) {

		L.data[j] = L.data[j - 1];
	}

	L.data[i - 1] = e;
	L.length++;
	return 1;
}

//按位删除
int  DeleteList(SqList &L, ElemType i, ElemType &e) {
	if (i < 0 || i >= L.length)
		return 0;
	printf("删除顺序表第%d个位置数据:%d\n", i, L.data[i - 1]);

	for (int j = i - 1; j < L.length - 1; j++) {

		L.data[j] = L.data[j + 1];
	}

	L.length--;
	return 1;
}

//修改第i个元素为e
int  AlterList(SqList &L, int i, int e) {
	if (i < 0 || i > L.length - 1)
		return 0;
	L.data[i - 1] = e;
	return 1;
}

//按位查询
int GetList(SqList L, int i) {
	if (i < 0 || i > L.length) {
		printf("error");
		return 0;
	}

	return L.data[i - 1];
}

//按值查询,并输出位序
int  LocatedList(SqList L, int e) {
	for (int i = 0; i < L.length; i++) {

		if (e == L.data[i])
			return i + 1;
	}

	return 0;
}

//输出顺序表表长
int Length(SqList L) {
	return L.length;
}


bool IsEmpty (SqList L) {
	if (L.length == 0)
		return true;
	return false;
}




//打印数据
void PrintList(SqList L) {
	for (int  i = 0; i < L.length; i++) {

		printf("data[%d]=%d\n", i, L.data[i]);
	}
}

void DestoryList(SqList &L ) {
	free(L.data);
	L.length = 0;
	L.MaxSize = 0;

}

//增加动态数组的长度
void IncreaseSize(SqList &L, ElemType len) {
	ElemType *p = L.data;
	L.data = (int *) malloc((L.MaxSize + len) * sizeof(ElemType));

	for (ElemType i = 0; i < L.length; i++) {

		L.data[i] = p[i];   // 将数据复制到新区域
	}

	L.MaxSize += len; // 顺序表最大长度增加len
	free(p);            // 释放原来的内存空间
}

//主函数
int main() {
	SqList L;   // 初始化
	InitList(L);
	L.length = InitSize;

	for (ElemType i = 0; i < L.MaxSize; i++) {      // 数组赋值

		L.data[i] = i;
	}

	int e;
	printf("删除flag=%d\n", DeleteList(L, 5, e));
	PrintList(L);

	printf("插入flag=%d\n", InsertList(L, 2, 66));
	PrintList(L);

	printf("修改flag=%d\n", AlterList(L, 1, 88));
	PrintList(L);

	printf("按位查找%d\n", GetList(L, 5));
	printf("按值查找%d\n", LocatedList(L, 88));
	printf("顺序表的表长为%d\n", Length(L));
	printf("顺序表是否为空%d\n", IsEmpty(L));

	printf("MaxSize ==%d\n", L.MaxSize);
	IncreaseSize(L, 8);
	printf("MaxSize ==%d\n", L.MaxSize);

	DestoryList(L);
	PrintList(L);
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/472056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 刷题 --- 快速幂

前言&#xff1a; 幂运算是一种常见的运算&#xff0c;求取a^n,最容易想到的方法便是通过循环逐个累乘&#xff0c;其复杂度为O(n)&#xff0c;这在很多时候是不够快的&#xff0c;所以我们需要一种算法来优化幂运算的过程。 快速幂&#xff0c;二进制取幂&#xff08;Binary…

Transformer的前世今生 day03(Word2Vec、如何使用在下游任务中)

前情回顾 由上一节&#xff0c;我们可以得到&#xff1a; 任何一个独热编码的词都可以通过Q矩阵得到一个词向量&#xff0c;而词向量有两个优点&#xff1a; 可以改变输入的维度&#xff08;原来是很大的独热编码&#xff0c;但是我们经过一个Q矩阵后&#xff0c;维度就可以控…

express+mysql+vue,从零搭建一个商城管理系统16--收货地址(全国省市县名称和code列表)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建config/area.js二、新建models/address.js三、新建dao/address.js四、新建routes/address.js五、添加地址六、查询用户地址列表总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写serv…

ANOMALY TRANSFORMER: TIME SERIES ANOMALY DETECTION WITH ASSOCIATION DISCREPANCY

论文题目&#xff1a; ANOMALY TRANSFORMER: TIME SERIES ANOMALY DETECTION WITH ASSOCIATION DISCREPANCY 发表会议&#xff1a;ICLR 2022 论文地址&#xff1a;https://openreview.net/pdf?idLzQQ89U1qm_ 论文代码&#xff1a;https://github.com/thuml/Anomaly-Transforme…

七、Java中SpringBoot组件集成接入【Minio文件服务器】

七、Java中SpringBoot组件集成接入【Minio文件服务器】 1.Minio介绍2.搭建Minio服务2.1Windows部署2.2Linux部署2.3docker部署 3.Minio可视化操作4.SpringBoot接入Minio1.添加maven依赖2.yaml配置文件3.配置类4.工具类5.控制类 5.常见问题6.其他参考文章 1.Minio介绍 对象存储…

设计模式深度解析:适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼 探索设计模式的魅力&#xff1a;深入了…

Day16-【Java SE进阶】IO流(二):字符流、缓冲流、转换流、打印流、数据流、序列化流、IO框架

一. 字符流 字节流&#xff1a;适合复制文件等&#xff0c;不适合读写文本文件 字符流&#xff1a;适合读写文本文件内容 1. FileReader(文件字符输入流) 作用:以内存为基准&#xff0c;可以把文件中的数据以字符的形式读入到内存中去。读取单个字符&#xff0c;性能比较差&a…

【位运算】【 数学】【 哈希映射】2857. 统计距离为 k 的点对

本文涉及知识点 位运算 数学 哈希映射 LeetCode 2857. 统计距离为 k 的点对 给你一个 二维 整数数组 coordinates 和一个整数 k &#xff0c;其中 coordinates[i] [xi, yi] 是第 i 个点在二维平面里的坐标。 我们定义两个点 (x1, y1) 和 (x2, y2) 的 距离 为 (x1 XOR x2) …

PMP备考心得 | 策略与技巧大揭秘

1.理解考试大纲&#xff1a;首先&#xff0c;你需要熟悉PMP考试的内容和结构。PMI官网提供了详细的考试大纲&#xff0c;包括项目管理的五个过程组&#xff08;启动、规划、执行、监控、收尾&#xff09;和十个知识领域&#xff1b; 2.制定学习计划&#xff1a;根据个人的时间…

【C语言】基本语法知识C语言函数操作符详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;C语言_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.基本语法 1.1 代码解释 1.1.1 main()主函数 1.1.2 int 1.1.3 { } 1.1.4 printf()库函数 1.1.5 stdio.h头文件 1.2 C语言的…

突破边界:Web3开启数字化社会的新纪元

引言 随着科技的不断进步和数字化社会的发展&#xff0c;Web3正逐渐成为了人们关注的焦点。作为新一代互联网的演进形态&#xff0c;Web3具有突破传统边界、实现去中心化的特点&#xff0c;被认为将开启数字化社会的新纪元。本文将深入探讨Web3的概念、特点、应用场景&#xf…

VueUse常见方法使用

npm i vueuse/core 1、useDebounceFn 节流防抖 import { useDebounceFn } from vueuse/core<button type"button" class"search" click"query">查询</button>// 查询 获取table数据const query2 async () > {try {const res …

MySQL 多表查询强化练习

环境准备 create table dept(id int PRIMARY KEY,dname VARCHAR(50),loc VARCHAR(50) ); insert into dept values (10,研发部,北京), (20,学工部, 上海), (30,销售部,广州 ), (40,财务部,深圳);create table job(id int PRIMARY KEY,jname VARCHAR(20),descripition VARCHAR(…

latex如何对一段文本进行加粗

在LaTeX中&#xff0c;你可以使用\textbf{}命令来对一段文本进行加粗。例如&#xff1a; \textbf{这是要加粗的文本}这将会把"这是要加粗的文本"这段文字显示为加粗。 如果你想要对整段文本进行加粗&#xff0c;你可以将整段文本都放在\textbf{}命令中&#xff0c;…

jsp学习

1.新建文件&#xff0c;创建web动态项目 2.项目点击next两下&#xff0c;点击勾选gentear&#xff0c;点击finish 3.文件成功后是有jsp文件 4.在webapp新建jsp文件 5. 使用模板html5建立文件 <% page language"java" contentType"text/html; charsetUTF-8&qu…

西瓜书机器学习AUC与ℓ-rank(loss)的联系理解以及证明(通俗易懂)

前言 在学习到这部分时&#xff0c;对 ℓ-rank 以及AUC的关系难以理解透彻&#xff0c;在网上看到其他博主也并未弄明白&#xff0c;大家大多写自己的理解&#xff0c;我希望您在看完这篇文章时能够深刻理解这二者的关系&#xff0c;如果我的理解有误&#xff0c;希望您在评论…

数据结构 之 二叉树

&#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff01;&#xff01;&…

python网络爬虫实战教学——urllib的使用(1)

文章目录 专栏导读1、前言2、urllib的使用3、发送请求3.1 urlopen3.2 request 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对…

mysql 数据库 基本介绍

一 数据 &#xff08;一&#xff09;数据是什么 描述事物的符号记录 包括数字&#xff0c;文字、图形、图像、声音、档案记录气 以“记录”形式按统一的格式进行存储 &#xff08;二&#xff09;数据的分类 1&#xff0c;结构化的数据 即有固定格式和有限长度的数据。例…

01_Kubernetes基础

Kubernetes为什么叫K8S&#xff1a;因为K和S之间有8个字母 为什么需要K8S 对于云计算来说有自己的交互标准 Paas的下一代标准就是容器化&#xff0c;容器的集群化有没有很好的方案&#xff1f;有需求就会有产品&#xff0c;这个产品就叫做资源管理器。 首先是Apache的MESOS&…