线性结构之数组[基于郝斌课程]

news/2025/9/21 15:34:16/文章来源:https://www.cnblogs.com/EricsT/p/19103406

线性结构:把所有的结点用一根线穿起来

连续存储[数组]

  什么叫做数组:元素类型相同,大小相等


/*
@file      main.c
@brief     线性结构之数组
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-21
@history   2025-09-21 EricsT - 新建文件
*/#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>struct Arr//定义了一个复合数据类型
{int* ptrBase;//存储数组的第一个元素的地址int len;//数组所能容纳的最大元素的个数int cnt;//当前数组有效元素的个数//int increment;//自动增长因子
};void init_arr(Arr* ptrArr, const int len);//初始化
bool append_arr(Arr* ptrArr, int appendValue);//追加
bool insert_arr(Arr* ptrAee, int insertPos, int insertValue);//插入
bool delete_arr(Arr* ptrArr, int deletePos);//删除
int get_arr(Arr* ptrArr, int getPos);//获取某一元素
bool is_empty_arr(const Arr* ptrArr);//是否为空
bool is_full_arr(const Arr* ptrArr);//是否满
void sort_arr(Arr* ptrArr);//排序
void show_arr(const Arr* ptrArr);//显示
void inversion_arr(Arr* ptrArr);//倒置int main(void)
{Arr arr;//此时已经分配了一块内存,该内存大小为 sizeof(Arr)//此时只定义未初始化init_arr(&arr, 6);append_arr(&arr, 2);append_arr(&arr, 3);append_arr(&arr, 4);append_arr(&arr, 5);insert_arr(&arr, 2, 9);show_arr(&arr);printf("\n");delete_arr(&arr, 3);show_arr(&arr);printf("\n");printf("%d\n", get_arr(&arr, 3));inversion_arr(&arr);show_arr(&arr);sort_arr(&arr);printf("\n");show_arr(&arr);return 0;
}void init_arr(Arr* ptrArr, const int len)
{ptrArr->ptrBase = (int*)malloc(sizeof(int) * len);if (NULL == ptrArr->ptrBase){printf("动态内存分配失败\n");exit(-1);//终止整个程序}else{ptrArr->len = len;ptrArr->cnt = 0;}return;
}void show_arr(const Arr* ptrArr)
{if (is_empty_arr(ptrArr)){printf("该数组为空\n");return;}for (int i = 0; i < ptrArr->cnt; ++i)printf("%d ", *(ptrArr->ptrBase + i));return;
}bool is_empty_arr(const Arr* ptrArr)
{if (0 == ptrArr->cnt)return true;return false;
}bool append_arr(Arr* ptrArr, int appendValue)
{if (is_full_arr(ptrArr))//满了return false;*(ptrArr->ptrBase + ptrArr->cnt) = appendValue;ptrArr->cnt += 1;return true;
}bool is_full_arr(const Arr* ptrArr)
{if (ptrArr->cnt == ptrArr->len)return true;return false;
}bool insert_arr(Arr* ptrArr, int insertPos, int insertValue)
{if (is_full_arr(ptrArr))return false;if (insertPos < 1)return 0;if (insertPos > ptrArr->len)return false;if (insertPos > ptrArr->cnt + 1)return false;for (int i = ptrArr->cnt - 1; i >= insertPos - 1; --i)*(ptrArr->ptrBase + i + 1) = *(ptrArr->ptrBase + i);*(ptrArr->ptrBase + insertPos - 1) = insertValue;ptrArr->cnt += 1;return true;
}bool delete_arr(Arr* ptrArr, int deletePos)
{if (is_empty_arr(ptrArr))return false;if (deletePos < 1)return false;if (deletePos > ptrArr->cnt)return false;for (int i = deletePos - 1; i < ptrArr->cnt - 1; ++i)*(ptrArr->ptrBase + i) = *(ptrArr->ptrBase + i + 1);ptrArr->cnt -= 1;return true;
}int get_arr(Arr* ptrArr, int getPos)
{if (is_empty_arr(ptrArr))return -1;if (getPos < 1)return -1;if (getPos > ptrArr->cnt)return -1;return ptrArr->ptrBase[getPos - 1];
}//void inversion_arr(Arr* ptrArr)
//{
//	int* ptr = (int*)malloc(sizeof(int) * ptrArr->cnt);
//	
//	for (int i = 0; i < ptrArr->cnt; ++i)
//		ptr[i] = ptrArr->ptrBase[i];
//
//	for (int i = 0; i < ptrArr->cnt; ++i)
//		ptrArr->ptrBase[ptrArr->cnt - 1 - i] = ptr[i];
//
//	free(ptr);
//}void inversion_arr(Arr* ptrArr)
{int i = 0;int j = ptrArr->cnt - 1;int temp = 0;while (i < j){temp = ptrArr->ptrBase[i];ptrArr->ptrBase[i] = *(ptrArr->ptrBase + j);ptrArr->ptrBase[j] = temp;i++;j--;}
}void sort_arr(Arr* ptrArr)
{for (int j = 0; j < ptrArr->cnt; ++j){for (int i = j + 1; i < ptrArr->cnt; ++i){if (ptrArr->ptrBase[j] > ptrArr->ptrBase[i]){int temp = ptrArr->ptrBase[j];ptrArr->ptrBase[j] = ptrArr->ptrBase[i];ptrArr->ptrBase[i] = temp;}}}	
}

 

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

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

相关文章

完整教程:Vue中的props方式

完整教程:Vue中的props方式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

深度剖析 B 站关键词排名:策略与技巧全解析 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

图解25:MySQL主从复制原理

使用AI图生图,有些修饰的还不错,有些差强人意,特别是文字内容混在一起的AI明显是比较难处理

用 Go 编写验证码识别脚本(基于 Tesseract)

一、概述 识别验证码通常用于登录自动化、表单填写等自动化流程中。对于字符清晰、干扰较少的验证码,OCR 是一种轻便高效的识别方式。本文介绍如何使用 Go 调用 Tesseract OCR 实现验证码图片的识别。 二、前提条件安…

第03周 预习、实验与作业:面向对象入门2与类的识别

一、什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗? (1)什么样的方法应该用static修饰? 1.工具类或者辅助方法 例如:Math.sqrt()、Arrays.sort()等,…

完整教程:MySQL 存储过程完整实战手册---一篇吃透 Stored Procedure

完整教程:MySQL 存储过程完整实战手册---一篇吃透 Stored Procedure2025-09-21 15:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto …

数据结构 静态链表的实现(算法篇) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Zero-Shot、One-Shot、Few-Shot概念

Zero-Shot提示:模型只根据任务的描述生成响应,不需要任何示例。 One-Shot提示:只提供一个例子。 Few-Shot提示:提供几个例子。在提示中的作用是通过少量样本引导模型对特定任务进行学习和执行,例如通过提供少量风…

ADS放入元器件include和DK.zip文件依然提示未定义

ADS放入元器件include和DK.zip文件依然提示未定义各位ADS大佬,我在ads中导入CUSTOMER_ADS_V2005AP0806_PRJ.zip和图片中的这些文件(都是导入元器件模型和其中一个zip文件)都提示下面的截图,是我导入的顺序不对,还…

AI元人文(十三):良知觉醒——论三值伦理模型与元道德主体的诞生

AI元人文(十三):良知觉醒——论三值伦理模型与元道德主体的诞生 文/岐金兰 楔子:规则之外的深渊 “第一定律:机器人不得伤害人类个体,或因不作为致使人类个体受到伤害。” 阿西莫夫的“机器人三定律”曾为我们描…

SPAR类比推理模型学习(与常见小目标检测方法总结) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Oracle EBS ERP——常见查询业务场景 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

「MCOI-05」魔仙

题意 给定一个 \(n\), 构造长度为 \(n\) 的序列,使得和为 0,乘积为 \(n\)。 解答 我们考虑 \(n\) 的性质,发现 \(0\) 是一个偶数,如果序列中没有偶数,作为一对奇数乘积的 \(n\) 自然也会是奇数,奇数个奇数整不出…

BlueHat v18 会议资料现已发布:前沿安全技术与漏洞缓解策略

微软安全响应中心公开BlueHat v18会议资料,包含主题演讲、前沿技术追踪和攻击类型缓解策略的幻灯片与视频,同时宣布BlueHat以色列站征稿启动,鼓励安全研究者提交前沿研究成果。上个月我们成功举办了又一届精彩的Blu…

label和brand的区别(品牌=brand?错了,你们的英语都学错了!)

如果要你将“面向大众的品牌”翻译成英语,你觉得应该怎么翻译? economical brand? 大错特错。地道的表达方式是“mass-market label”。 mass-market这个不知道很正常,他不是一个口语化的概念,而是一个市场营销包…

2025.9.21——1绿

普及+/提高 P4427 [BJOI2018] 求和 树上的问题,lca+dfs+预处理就能解决。 但我因为dfs初始化的参数给错了、答案的计算方式写错了,WA了好几次。 顺便我8个月前居然还写过这道题,当时没用预处理WA了subtask。

故障处理:ORA-04031真实案例分享

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本案例来自一…

图解24:8种常用的缓存淘汰策略

最近都在开发AI集成项目,博客文章也试试AI特效处理,使用AI效果还可以,也可以做点水印,只是图片没有原图那么高清了

读书笔记:更智能的数据库索引:只关注你需要的数据

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

JS设计模式-模块模式

模块模式好像不是经典的设计模式,但不可避免的每种编程语言都加入了模块的概念。有时候可能用了模块模式但并不知道自己用的是模块模式。虽然不是经典的设计模式,但是作为JS创建模块的一种模式也是经常被使用。这里对…