数据结构-顺序表的大小

一、固定大小的顺序表的缺陷:

1、不能随着数据的增多而增大

2、收到栈空间的限制

栈的大小:window下是1M

二、可变大小的顺序表的设计

1、什么是存储单元

cpu访问内存(通过地址)

8个二进制位称为一个存储单元(一个字节)

2、内存的划分

代码区、数据区、mallocfree堆、栈区(从上到下)

栈区:凡是函数内定义的变量都在栈区(除了静态局部变量在数据区)

数据区:在函数之外定义的变量还有静态变量都在数据区

代码区:存放代码的

堆区:通过内存管理函数,动态(在程序运行的过程中)的申请   (申请空间malloc   calloc    realloc 释放空间:free)

3、初始化线性表

申请为可改变大小的内存空间

注意:

形参无法改变实参的大小(使用指针/或者别名)

申请空间=元素类型的大小*元素个数

使用指针一定要判空

如果申请的内存空间为空,申请失败,退出程序

4、顺序表的打印和查询

void Printfseqlist(SeqList *p)
{assert(p != NULL);for (int i = 0; i < p->rongliang; i++){printf("%5d", p->date[i]);}printf("\n");
}int FindValue(SeqList* p, int val)
{assert(p != NULL);int q = -1;for (int i = 0; i < p->daxiao ; i++){if (p->date[i] == val){q=i;break;}}return q;}

5、按指定位置在顺序表中插入数据

需要的元素:顺序表、位置、val(插入的值)

bool InsertTtem(SeqList*p,int post,int val)
{assert(p != NULL);if (post<0 || post > p->daxiao){return false;}for (int i = p->daxiao-1; i >= post; --i){p->date[i + 1] = p->date[i];}p->date[post] = val;p->daxiao += 1;return true;}
bool Push_back(SeqList* p, int val)
{assert(p != NULL);InsertTtem(p, p->daxiao, val);}
bool Push_front(SeqList* p, int val)
{assert(p != NULL);InsertTtem(p, 0, val);}

6、顺序表增容

1)申请原来空间的二倍malloc

2)将原来的数据拷贝过来

3)释放原有空间

4)将原来的date指向新开辟的空间

5)改变容量(p->rongliang)大小

//为当前顺序表增容
bool Inc_Capacity(SeqList* p)
{assert(p != NULL);ElemType*newdate = (ElemType*)malloc(SEQ_INC_SIZE * sizeof(int)* p->rongliang);if (NULL == newdate){return false;}for (int i = 0; i < p->daxiao; ++i){newdate[i] = p->date[i];}//使用移动函数//memmove(newdate, p->date, sizeof(ElemType) * p->daxiao);free(p->date);p->date = newdate;p->rongliang *= 2;
}

realloc的操作步骤

int *p=(int *)malloc(sizeof(int)*5);

for(int i=0;i<5;i++)

{p[i]=i}

p=(int*)realloc(p,sizeof(int)*10);

free(p);   

1)、开辟新空间

2)、把p所指向的内容转移到新空间

3)、free p

4)、把新的空间给p

7、顺序表中删除数据

//删除指定位置的数据
bool EraseItem(SeqList* p, int post)
{assert(p != NULL);if (post<0 || post>p->daxiao-1){return false;}for (int i = post; i < p->daxiao; ++i){p->date[i] = p->date[i + 1];}p->daxiao -=1;return true;
}
//尾删
void Pop_Back(SeqList* p)
{assert(p != NULL);EraseItem(p, p->daxiao-1);
}
//头删
void Pop_Frond(SeqList* p)
{assert(p != NULL);EraseItem(p, 0);
}
//删除数据表中的元素bool Remove(SeqList* p, int val)
{assert(p != NULL);return EraseItem(p, FindValue(p, val));
}

删除表中元素步骤:

1)、先找到数据所在位置

2)、删除所在位置的顺序

8、销毁函数和重置为空

重置为空:

p->daxiao为0,就是空表,原有数据可能会残留在堆中,再次调用,数据会被覆盖

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

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

相关文章

如何预防[[MyFile@waifu.club]].wis [[backup@waifu.club]].wis勒索病毒感染您的计算机?

导言&#xff1a; 近期&#xff0c;一种新兴的威胁[[MyFilewaifu.club]].wis [[backupwaifu.club]].wis勒索病毒&#xff0c;引起了广泛关注。这种恶意软件通过其高度复杂的加密算法&#xff0c;威胁着用户和组织的数据安全。本文将深入介绍[[MyFilewaifu.club]].wis [[backup…

(7)Linux GDB以及gcc和g++

&#x1f4ad; 前言 本章我们将带着大家高雅的学一学令众多习惯图形化页面的朋友难受的 gdb 调试&#xff0c;这部分知识可以选择性学习学习&#xff0c;以后倘若遇到一些问题时能在 Linux 内简单调试&#xff0c;还是很香的。然后在讲讲 gcc 和 g&#xff0c;系统讲解程序运行…

​C语言顺序查找算法以及代码​

通过前面对静态查找表的介绍&#xff0c;静态查找表即为只做查找操作的查找表。静态查找表既可以使用顺序表表示&#xff0c;也可以使用链表结构表示。虽然一个是数组、一个链表&#xff0c;但两者在做查找操作时&#xff0c;基本上大同小异。 本节以静态查找表的顺序存储结构为…

【Spring】11 EnvironmentAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一就是 Bean 生命周期中的回调接口。本文将着重介绍一个与环境&#xff08;Environment&#xff09;相关…

docker vue项目打成镜像并推送到仓库

shell 脚本 #!/bin/bash image_nameweb version$1 echo ${version}echo build...... docker build -t ${image_name}:${version} . echo build doing..... sleep 10 image_idsudo docker images | grep ${image_name} | awk -F" " {print $3} | head -n 1 echo ${im…

Atcoder Beginner Contest 332 (A - F 题)

目录 [A - Online Shopping](https://atcoder.jp/contests/abc332/tasks/abc332_a)Problem StatementConstraintsInputOutputSample Input 1Sample Output 1Sample Input 2Sample Output 2Sample Input 3Sample Output 3 SolutionCode [B - Glass and Mu](https://atcoder.jp/c…

高并发下接口幂等性解决方案

高并发下接口幂等性解决方案 1. 幂等性概念: ①. 一个幂等操作指任意多次执行所产生的影响跟一次执行的影响相同.②. 幂等函数(幂等方法):a. 可以使用相同参数重复执行,并能获得相同结果的函数.b. 这些函数不会影响数据状态,也不用担心重复执行会对数据造成改变.c. 如:"…

Crocoddyl: 多接触最优控制的高效多功能框架

系列文章目录 前言 我们介绍了 Crocoddyl&#xff08;Contact RObot COntrol by Differential DYnamic Library&#xff09;&#xff0c;这是一个专为高效多触点优化控制&#xff08;multi-contact optimal control&#xff09;而定制的开源框架。Crocoddyl 可高效计算给定预定…

太阳能供电+4G摄像头搭建EasyCVR鱼塘养殖远程视频监控方案

一、背景需求 随着我国农业的快速发展&#xff0c;以及对新兴技术的应用&#xff0c;养殖业、农牧业、种植业等也面临着全新的挑战与机遇。对鱼塘养殖行业来说&#xff0c;养殖区域面积大、管理难&#xff0c;经常会遇到偷钓者、盗窃鱼苗、非法入侵等监管难题。在国家大力扶持…

2023年OceanBase开发者大会-核心PPT资料下载

一、峰会简介 2023年OceanBase开发者大会主要涵盖了OceanBase的最新技术进展、产品更新以及开发者工具的发布。大会发布了OceanBase 4.1版本&#xff0c;公布了两大友好工具&#xff0c;升级了文档的易用性&#xff0c;并统一了企业版和社区版的代码分支。这些举措全面呈现了O…

基于局域网和广域网训练推理加速策略

一、基于局域网的多GPU上并行训练 TensorFlow 的 MirroredStrategy 和 PyTorch 的 DistributedDataParallel 它们可以帮助您在多个 GPU 或多个计算节点上训练大型模型。这些策略的核心目标是提高训练速度,同时保持模型的准确性和稳定性。 加速的底层原理 TensorFlow 的 Mirro…

Android Studio导出Excel的一些感悟

目前&#xff0c;我一共用了四种依赖。分别用于导出Excel。 第一种&#xff1a; // https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxlimplementation group: net.sourceforge.jexcelapi, name: jxl, version: 2.6.12 缺点&#xff1a;1、已经很久没有更新…

一文教会pandas

今天的笔试题令我感触很深&#xff0c;回顾一下之前写的都是低代码想想都。。。 anareport[[reportid,anndt,stockid]].drop_duplicates().rolling(window10,min_periods1).sum().groupby([anndt,stockid])[reportid].count() dfanareport[[reportid,anndt,stockid]].drop_dup…

构建高效持久层:深度解析 MyBatis-Plus(02)

目录 引言1. 逻辑删除1.1 概述1.2 逻辑删除的优势1.3.为什么使用逻辑删除1.4 综合案例 2. 乐观锁和悲观锁2.1.什么是乐观锁和悲观锁2.2.乐观锁和悲观锁的区别2.3.综合案例 3. 分页插件总结 引言 在现代软件开发中&#xff0c;数据库操作是不可或缺的一环。为了提高系统的性能、…

awk统计日志

部分日志文本格式内容 [2023-12-18 22:40:52.301][INFO ][221][com.excellent.common.core.security.filter.UrlRedirectFilter.doFilter:131] ----------------->>> 请求进入拦截器&#xff0c;IP&#xff1a;14.111.199.218, CLIENT&#xff1a;ANDROID&#xff0c…

避坑指南:uni-forms表单在uni-app中的实践经验

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;uni-app篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:uni-app中forms表单的避坑指南篇 该篇章已被前端圈子收录,点此处进入即可查看更多优质内…

LeetCode-152. 乘积最大子数组

问题描述 原题链接 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 问题分析 …

计算机网络考研辨析(后续整理入笔记)

文章目录 体系结构物理层速率辨析交换方式辨析编码调制辨析 链路层链路层功能介质访问控制&#xff08;MAC&#xff09;信道划分控制之——CDMA随机访问控制轮询访问控制 扩展以太网交换机 网络层网络层功能IPv4协议IP地址IP数据报分析ICMP 网络拓扑与转发分析&#xff08;重点…

Distilling the Knowledge in a Neural Network 中文版 (含: bibtex格式的引用)

bibtex格式的引用 article{hinton2015distilling,title{Distilling the knowledge in a neural network},author{Hinton, Geoffrey and Vinyals, Oriol and Dean, Jeff},journal{arXiv preprint arXiv:1503.02531},year{2015} }摘要 提高几乎所有机器学习算法性能的一个非常简…

阶段十-springsecurity总结

jwt认证流程 SpringSecurity 认证过程 第一步&#xff1a; 创建一个类实现UserDetailsService接口&#xff0c;重写其中的方法 通过重写 public UserDetails loadUserByUsername(String username) 方法 从数据库校验用户输入的用户名 配置SecurityConfig Bean注入 Passwor…