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

news2024/11/25 4:39:20
#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);
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“垃圾不落地,捡跑来助力”学雷锋志愿服务暨党支部党日活动

指导思想 紧紧围绕建设和谐社会主题&#xff0c;以创建文明为契机&#xff0c;学习雷锋精神&#xff0c;为人民服务为宗旨&#xff0c;大力开展志愿捡跑活动&#xff0c;激发大家积极参与志愿活动的热情&#xff0c;大力弘扬奉献、友爱、互助、进步的志愿服务精神。 活动启动 …

维度建模理论之事实表

事实表概述 事实表作为数据仓库维度建模的核心&#xff0c;紧紧围绕着业务过程来设计。其包含与该业务过程有关的维度引用&#xff08;维度表外键&#xff09;以及该业务过程的度量&#xff08;通常是可累加的数字类型字段&#xff09;。 事实表特点 事实表通常比较“细长”…

N 皇后00

题目链接 N 皇后 题目描述 注意点 1 < n < 9 解答思路 首先想到的是使用深度优先遍历回溯找到所有的情况&#xff0c;基本思路是&#xff1a;逐行确定Q在该行的位置&#xff0c;且每一行Q都是从第0列到第n - 1列全部考虑&#xff0c;在确定Q在任意一行的某一列时&am…

Java集合Collection之LinkedList

LinkeList LinkedList&#xff08;双向链表&#xff09;是一种常见的线性数据结构&#xff0c;但是并不会按线性的顺序存储数据。它由一系列节点组成&#xff0c;每个节点包含数据部分和一个指向下一个节点的引用。相比于数组&#xff0c;链表具有动态大小、插入和删除效率高的…

练习实践-TLS协议01-Wireshark对https数据的解密

参考来源&#xff1a; https://zhuanlan.zhihu.com/p/36669377 https://blog.csdn.net/u010726042/article/details/53408077 思路&#xff1a; wireshark抓到的https流量包经过了ssl加密&#xff0c;那么我们如何才能查看解密的数据呢&#xff1f;Firefox和Chrome浏览器都支…

Godot 学习笔记(2):信号深入讲解

文章目录 前言相关链接环境信号简单项目搭建默认的信号先在label里面预制接收函数添加信号 自定义无参数信号为了做区分&#xff0c;我们在label新增一个函数 自定义带参数信号Button代码label代码连接信号 自定义复杂参数信号自定义GodotObject类ButtonLabel连接信号 父传子Ca…

国内超好用且免费的 AI 写作工具有哪些?

目前&#xff0c;市面上这类AI工具实在是太多了&#xff0c;比如依托于清华大学开发的智谱清言&#xff0c;或亦是百度的文心一言&#xff0c;还是阿里云的通义千问&#xff0c;这些AI工具在功能是类似的&#xff0c;但是依托于大模型的不同&#xff0c;可能回答的结果迥然不同…

基于springboot+vue的在线互动学习网站

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

(C语言)memcpy函数详解与模拟实现

目录 1. memcpy函数详解 情况一&#xff1a; 情况二&#xff1a; 情况三&#xff1a; 情况四&#xff1a; 情况五&#xff1a; 2. memcpy模拟实现 2.1 重叠情况的讨论&#xff1a; 2.2 memcpy函数超出我们的预期 1. memcpy函数详解 头文件<string.h> 这个函数和…

canoe 以太网配置

canoe vn5620 以太网配置 首先电脑连接上VN5620&#xff0c;配置了License才能进行端口设置 从开始菜单中打开Vector Hardware Configuration 进入到配置页面&#xff0c;会出现VN5620&#xff0c;选择进行右击&#xff0c;点击第一个选项Ethernet device configuration ca…

Open World Object Detection in the Era of Foundation Models

Open World Object Detection in the Era of Foundation Models 摘要介绍相关工作开放词汇物体检测开放世界目标检测类无关的目标检测3.真实世界目标检测基准3.1 数据集细节3.2 基准架构3.3 什么是一个未知对象4. 利用基准模型用于开放世界目标检测4.1 背景4.2 属性生成4.3 属性…

SD3刚发布不久,最新的SD3-Turbo就来了:只需要4步就能超过MidjourneyV6!

StabilityAI刚刚发布了SD3-Turbo的论文&#xff1a;Fast High-Resolution Image Synthesis with Latent Adversarial Diffusion Distillation。 SD3-Turbo采用了一种新的蒸馏方法&#xff1a;Latent Adversarial Diffusion Distillation (LADD)&#xff0c;与基于像素的ADD&am…

elment-ui el-tabs组件 每次点击后 created方法都会执行2次

先看错误的 日志打印: 错误的代码如下: 正确的日志打印: 正确的代码如下: 前言: 在element-ui的tabs组件中,我们发现每次切换页面,所有的子组件都会重新渲染一次。当子页面需要发送数据请求并且子页面过多时,这样会过多的占用网络资源。这里我们可以使用 v-if 来进行…

HarmonyOS NEXT应用开发之左右拖动切换图片效果案例

介绍 本示例使用滑动手势监听&#xff0c;实时调整左右两侧内容显示区域大小和效果。通过绑定gesture事件中的PanGesture平移手势&#xff0c;实时获取拖动距离。当拖动时&#xff0c;实时地调节左右两个Image组件的宽度&#xff0c;从而成功实现左右拖动切换图片效果的功能。…

python接口自动化测试数据和代码分离解析

common中存放的是整个项目中公共使用的封装方法 从工程目录上可以看到区分 datas中专门存放测试数据(yml文件) cases中专门集中存放测试用例 ... 数据分离的第一步先找到工程项目路径 1 2 3 4 5 6 7 8 9 10 11 12 # -*- encoding: utf-8 -*- """ __Software…

通过docker容器安装zabbix6.4.12图文详解(监控服务器docker容器)

目录 一、相关环境及镜像二、zabbix-server服务端部署1.使用docker创建zabbix-server服务端(1). 创建专用于Zabbix组件容器的网络(2). 启动空的MySQL服务器实例(3). 启动Zabbix Java网关实例(4). 启动Zabbix服务器实例并将实例与创建的MySQL服务器实例链接(5). 启动Zabbix Web界…

深入理解Ubuntu22:探索Linux操作系统的功能与应用

一、linux &#xff08;一&#xff09;、安装 1、电脑可以安装双系统&#xff0c;即在一套硬件上只能同时运行一个操作系统&#xff0c;例&#xff1a;C盘安装win&#xff0c;D盘安装linux。 2、虚拟机 虚拟机需要硬件支持&#xff0c;并需开启VT-x. 如&#xff1a;Virtual…

华为OD机试真题-推荐多样性-2024年OD统一考试(C卷)

题目描述: 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 1. 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推 2. 每个列表的元素尽量均…

②免费AI软件开发工具测评:通义灵码 VS 码上飞

前言 我又双叒叕来测评了&#xff01;上次给大家带来的是iFlyCode和CodeFlying两款产品的测评&#xff0c;受到了大家的一致好评~ 今天咱就继续来聊聊&#xff0c;这次我们选的的对象是通义灵码和码上飞&#xff0c;从名字上也能看到出来这两款产品一定是跟软件开发有关系的&…

【c++】c++背景(c++的前世今生)

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1. 什么是C 2. C发展史 3. C的重要性 3.1 语言的使用广泛度 3.2在工作邻域 1. 操作系统以及大型系统软件开发 2. 服务器端开发 3. …