(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;}}}
}

 

 

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

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

相关文章

什么是欧拉角/姿态角?

用一句话说&#xff0c;欧拉角就是物体绕坐标系三个坐标轴(x,y,z轴&#xff09;的旋转角度。 在这里&#xff0c;坐标系可以是世界坐标系&#xff0c;也可以是物体坐标系&#xff0c;旋转顺序也是任意的&#xff0c;可以是xyz,xzy,yxz,zxy,yzx,zyx中的任何一种&#xff0c;甚至…

机器学习笔记(十二):聚类

目录 1&#xff09;Unsupervised learning introduction 2&#xff09;K-means algorithm 3&#xff09;Optimization objective 4&#xff09;Random initialization 5&#xff09;Choosing the number of clusters 1&#xff09;Unsupervised learning introduction 下…

Linux下root登陆mysql

错误如下&#xff1a; 1.停止mysql服务 #service mysql stop2.进入到skip-grant-tables模式&#xff1a; #mysqld_safe --skip-grant-tables3.root连接mysql数据库&#xff1a; #mysql -uroot -p如出现如下错误&#xff1a; 其实&#xff0c;原本就没有这个目录&#xff1…

机器学习笔记(十三):降维

目录 1&#xff09;Motivation 1:Data Compression 2&#xff09;Motivation 2: Data Visualization 3&#xff09;Principal Component Analysis problem formulation 4&#xff09;Principal Component Analysis algorithm 5&#xff09;Advice for applying PCA 1&…

Django框架(展示图书信息简易版)

Linux环境下 创建虚拟环境 在python3中&#xff0c;创建虚拟环境 mkvirtualenv -p python3 虚拟机名称 mkvirtualenv -p python3 py_django查看创建的虚拟环境 workon退出当前的虚拟环境 deactivate 删除虚拟环境&#xff08;不要做&#xff09; rmvirtualenv 虚拟机名称 …

吴恩达机器学习作业(五):支持向量机

目录 1&#xff09;数据预处理 2&#xff09;Scikit-learn支持向量机 3&#xff09;决策边界比较 4&#xff09;非线性SVM 5&#xff09;最优超参数 6&#xff09;垃圾邮件过滤器 在本练习中&#xff0c;我们将使用支持向量机&#xff08;SVM&#xff09;来构建垃圾邮件分…

一些关于ROS中move_base的理解

move_base是ROS下关于机器人路径规划的中心枢纽。它通过订阅激光雷达、map地图、amcl的定位等数据&#xff0c;然后规划出全局和局部路径&#xff0c;再将路径转化为机器人的速度信息&#xff0c;最终实现机器人导航。这里又要盗官网的图了。 上面这个图很好的展示了move_base的…

机器学习笔记(十四):异常检测

目录 1&#xff09;Problem motivation 2&#xff09;Gaussian distribution 3&#xff09;Algorithm 4&#xff09;Developing and evaluating an anomaly detection system 5&#xff09;Anomaly detection vs. supervised learning 6&#xff09;Choosing what featur…

【Gym - 101606F】Flipping Coins(概率dp)

题干&#xff1a; Here’s a jolly and simple game: line up a row of N identical coins, all with the heads facing down onto the table and the tails upwards, and for exactly K times take one of the coins, toss it into the air, and replace it as it lands eith…

ROS actionlib学习(一)

actionlib是ROS中一个很重要的功能包集合&#xff0c;尽管在ROS中已经提供了srevice机制来满足请求—响应式的使用场景&#xff0c;但是假如某个请求执行时间很长&#xff0c;在此期间用户想查看执行的进度或者取消这个请求的话&#xff0c;service机制就不能满足了&#xff0c…

机器学习笔记(十五):推荐系统

目录 1&#xff09;Problem formulation 2&#xff09;Content-based recommendations 3&#xff09;Collaborative filtering 4&#xff09;Collaborative filtering algorithm 5&#xff09;Vectorization: Low rank matrix factorization 6&#xff09;Implementation…

*【CodeForces - 280C】Game on Tree(期望模型,期望的线性性)

题干&#xff1a; Momiji has got a rooted tree, consisting of n nodes. The tree nodes are numbered by integers from 1 to n. The root has number 1. Momiji decided to play a game on this tree. The game consists of several steps. On each step, Momiji chooses…

武侠风云(基础版)

基本任务&#xff1a; 1 建立角色类&#xff0c;角色拥有生命值的属性和攻击的方法&#xff0c;攻击值是随机的。 2 建立职业子类&#xff0c;刀客&#xff0c;&#xff08;伤害少&#xff0c;血量多&#xff09;剑客&#xff08;伤害正常&#xff0c;血量正常&#xff0c;有几…

机器学习笔记(十六):大规模机器学习

目录 1&#xff09;Learning with large datasets 2&#xff09;Stochastic gradient descent 3&#xff09;Mini-batch gradient descent 4&#xff09;Stochastic gradient descent convergence 1&#xff09;Learning with large datasets 回顾一下我们之前提到的这句…

【ZOJ - 3329】One Person Game(带循环的概率dp,数学期望,高斯消元,数学)

题干&#xff1a; There is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and Die3. Die1 has K1 faces. Die2 has K2 faces. Die3 has K3 faces. All the dice are fair dice, so the probability of rolling each value, 1 to K1, K…

智能聊天机器人系统

# 智能聊天机器人系统 # 1.系统简介 # 随着社会的各个公司以及大学对人工智能技术的深入研究和快速发展&#xff0c;人工智能技术将逐步应用到 # 方方面面。智能聊天机器人系统是基于各类传感器收集人类语音数据&#xff08;智能电视、智能空调&#xff0c; # 智能冰箱、智能音…

机器学习笔记:总结

下面是我们本课程学到的要点&#xff1a; 1&#xff09;监督学习&#xff1a;线性回归&#xff0c;逻辑回归&#xff0c;神经网络&#xff0c;SVM&#xff1b; 2&#xff09;无监督学习&#xff1a;k均值&#xff0c;PCA&#xff0c;异常检测 3&#xff09;特别应用&#xf…

ROS探索总结(十二)——坐标系统

在机器人的控制中&#xff0c;坐标系统是非常重要的&#xff0c;在ROS使用tf软件库进行坐标转换。 相关链接&#xff1a;http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一、tf简介 我们通过一个小小的实例来介绍tf的作用。 1、安装turtle包 <span>$ rosdep instal…

【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)

题干&#xff1a; 随着新版百度空间的下线&#xff0c;Blog宠物绿豆蛙完成了它的使命&#xff0c;去寻找它新的归宿。 给出一个有向无环的连通图&#xff0c;起点为1终点为N&#xff0c;每条边都有一个长度。绿豆蛙从起点出发&#xff0c;走向终点。 到达每一个顶点时&#x…

【LightOJ - 1079】Just another Robbery(概率dp,概率背包)

题干&#xff1a; As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (he wants everything quick!) so he decided to rob banks. He wants to make a calculated risk, and grab as much money as possible. But his friends - Hermi…