(2)连续存储数组的方法
目录
连续存储的代表应用:数组
1)结构体的定义:
2)基本操作
对数据进行初始化
判断数组是否为空
输出数组
判断数组是否满
追加元素
插入数组元素
删除数组元素
逆序
对数组进行排序
这篇笔记是根据郝斌老师的上课讲义整理而得:
模块一:线性结构
算法相当成熟;栈和队列是一种特殊的线性结构 把所有的节点用一根直线串起来
连续存储的代表应用:数组
1. 什么叫数组
元素类型相同,大小相等
2. 数组的优缺点:
存取速度快
插入元素很慢,空间通常是有限制的,需要知道数组的长度
1)结构体的定义:
#include <stdio.h>
#include <malloc.h>//包含了malloc函数
#include <stdlib.h>//包含了exit函数 /*定义了一个数据类型,该数据类型的名字叫做struct Arr,
该数据类型含有三个成员,分别是pBase、len、cnt*/
struct Arr
{ int *pBase; //存储的是数组的第一个元素的地址 int len; //数组所能容纳的最大元素的个数 int cnt;//当前数组有效的元素的个数
};
2)基本操作
void init_arr(struct Arr *pArr, int length);//对数组进行初始化
bool append_arr(struct Arr *pArr, int val); //追加元素
bool insert_arr(struct Arr *pArr, int pose, int val);//插入数据元素
bool delete_arr(struct Arr *pArr, int pose,int *pVal);//删除数据元素,*pVal返回删除元素的值
bool is_empty(struct Arr *pArr);//判断数组是否为空
bool is_full(struct Arr *pArr);//判断数组是否满
void sort_arr(struct Arr *pArr);//对数组进行排序,冒泡排序
void show_arr(struct Arr *pArr);//输出数组
void inversion_arr(struct Arr *pArr);//逆序
对数据进行初始化
void init_arr(struct Arr *pArr, int length)
{pArr->pBase = (int*)malloc(sizeof(int) * length);if (NULL == pArr->pBase){printf("动态内存分配失败!\n");exit(-1);}else{pArr->len = length;pArr->cnt = 0;}return;
}
判断数组是否为空
bool is_empty(struct Arr *pArr)
{if (0 == pArr->cnt)return True;elsereturn false;
}
输出数组
void show_arr(struct Arr *pArr)
{if (is_empty(pArr))printf("数组为空!\n");else{for(int i=0; i<pArr->cnt; i++)printf("%d ", pArr->pBase[i]);printf("\n");}
}
判断数组是否满
bool is_full(struct Arr *pArr)
{if (pArr->cnt == pArr->len)return true;elsereturn false;
}
追加元素
bool append_arr(struct Arr *pArr, int val)
{ if (is_full(pArr)) return false;pArr->pBase[pArr->cnt] = val; (pArr->cnt)++; return true;
}
插入数组元素
bool insert_arr(struct Arr * pArr, int pos, int val)//在pose前面插入元素
{int i;if (is_full(pArr))return false;if (pos<1 || pos>pArr->cnt+1)return false;for (i=pArr->cnt-1; i>=pos-1; --i){pArr->pBase[i+1] = pArr->pBase[i];}pArr->pBase[pos-1] = val;(pArr->cnt)++;return true;
}
删除数组元素
bool delete_arr(struct Arr * pArr, int pos, int * pVal)
{int i;if ( is_empty(pArr) )return false;if (pos<1 || pos>pArr->cnt)return false;*pVal = pArr->pBase[pos-1];先进行赋值,以免进行删除操作之后没有返回值for (i=pos; i<pArr->cnt; ++i){pArr->pBase[i-1] = pArr->pBase[i];}pArr->cnt--;return true;
}
逆序
void inversion_arr(struct Arr * pArr)
{int i = 0;int j = pArr->cnt-1;int t;while (i < j){t = pArr->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;//两两交换++i;--j;}return;
}
对数组进行排序
void sort_arr(struct Arr * pArr)
{int i, j, t;for (i=0; i<pArr->cnt; ++i){for (j=i+1; j<pArr->cnt; ++j){if (pArr->pBase[i] > pArr->pBase[j]){t = pArr->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;}}}
}
(2)连续存储数组的方法相关推荐
- 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.
数据结构大体成上可以分成两种: 1. 线性结构. 2. 非线性结构( 树,图) 1. 什么是线性结构 大概上可以这样定义: 加入所有的节点可以用一条直线连接起来. 就是线性结构... 2 ...
- 数据结构概念及连续存储数组的算法演示
一.数据结构的概念: 我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序),而执 ...
- php数组保存txt,php将数组存储为文本文件方法汇总,_PHP教程
php将数组存储为文本文件方法汇总, php 缓存数组形式的变量,实际上就是将 php 将数组写入到一个文本文件或者后缀名为 .php 存储起来,使用的时候直接调用这个文件.那么如何使用 php 将数 ...
- localStorage存储数组以及取数组方法。
localStorage存储数组以及取数组方法. let weekArray = ['周一'.'周二'.'周三'.'周四'.'周五'] 存:localStorage.setItem('weekDay' ...
- 不会做特征工程的 AI 研究员不是好数据科学家!上篇 - 连续数据的处理方法 本文作者:s5248 编辑:杨晓凡 2018-01-19 11:32 导语:即便现代机器学习模型已经很先进了,也别
不会做特征工程的 AI 研究员不是好数据科学家!上篇 - 连续数据的处理方法 雷锋网(公众号:雷锋网) AI 科技评论按:眨眼间我们就从人工特征.专家系统来到了自动特征.深度学习的人工智能新时代,众多 ...
- OpenCV isContinuous()连续存储的问题
OpenCV isContinuous()连续存储的问题 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/78614662 ...
- Java基础语法之变量、运算符、流程控制、数组和方法等基础语法
变量.运算符.流程控制.数组和方法等基础语法.Java程序的执行流程,符合Java语法规则的程序. 1.1.1 Java初识 对Java进行简单介绍,Java程序如何执行,以及Java程序的结构. J ...
- javascript数组——新建数组、访问数组、遍历数组的方法、数组对象的方法、冒泡排序算法、json的正反序列化
目录 数组 通过构造函数的三种方法 字面量创建数组方式 访问数组 遍历数组的方法 遍历:遍历就是把数组中的元素从头到尾都访问一次 操作数组对象的方法 删除和添加 delete与Vue.delete区别 ...
- java二维数组的创建,java二维数组创建方法
java动态创建二维数组,从零学java笔录-第31篇 图解二位数组在内存中存储,java二维数组动态赋值,java二维数组创建方法 二维数组的定义 type arrayName[ ][ ]; typ ...
最新文章
- 服务器 声音文件 nginx,docker nginx搭建视频音频服务器
- mysql企业版多少钱_企业资质代办多少钱
- c语言在程序中显示现在星期几,C语言程序设计: 输入年月日 然后输出是星期几...
- 看完少年的你,想到少年的我
- 手机电池余量 java,用Java获取电池电量
- Ajax跨域请求以及乱码解决
- 利用微信公众号实现zabbix告警
- 用Python进行数学建模(一)
- 电脑计算机配置应用程序兼容性,电脑怎么打开兼容模式怎么办
- springboot+vue前后端分离实现企业人事管理系统
- 归并算法 merge
- UE 编辑器无法保存文件(图表被连接到外部包中的私有对象)
- 使用python批量创建文件夹or文件
- Sentinel-哨兵机制
- 保险巨头安盛将推出代币众筹保险服务
- 指尖江湖李忘生鸿蒙初开,指尖江湖掌门天团年轻时外装来袭!其中,纯阳掌教李忘生的该系列外装名为?剑网3指尖江湖11.9答案_游侠手游...
- 【Python学习】matplotlib学习总结——条形图
- 去哪儿网BI平台建设演进史
- 群晖rsync同步详解_FreeNas中使用rsync同步文件
- jquery如何判断浏览器是否是ie6
热门文章
- 计算机科学中的研究成果,田聪教授团队科研成果在计算机科学顶会LICS 2020发表...
- 华为云服务器安装win10系统,云服务器可以安装win10吗
- java 存储空间_Java中的存储空间类型
- c语言math函数 sgn,常用矩阵计算C语言代码
- Gdiplus::GdiplusBase::operator new 函数不接受3 个参数问题的处理
- Linux查看设置系统时区
- Linux NULL定义
- 使用Wireshark进行SIP包解析
- 解决SerMyAdmin无法登陆的问题
- figcaption html5,HTML5 figcaption 标签