尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

线性结构之数组[基于郝斌课程]
📅 发布时间:2026/6/20 13:27:28

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

连续存储[数组]

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


/*
@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;}}}	
}

 

本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/19103406

相关新闻

  • 完整教程:Vue中的props方式
  • 完整教程:MySQL 存储过程完整实战手册---一篇吃透 Stored Procedure
  • 「MCOI-05」魔仙

最新新闻

  • 信创AI模型适配模盒:从GLM-5部署看国产算力全栈落地
  • 2026-06-20 闲话
  • 3个实用技巧彻底优化《鸣潮》体验:从帧率解锁到抽卡分析的完整指南
  • 2026济宁本地正规瓷砖空鼓维修服务商盘点|无损免拆砖修复,全域上门售后有保障 - 宅安选房屋修缮
  • 5个步骤掌握Source Han Serif CN:免费开源中文字体完全指南
  • ARM中断与VIC控制器实战:从原理到配置与避坑指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号