个人主页:PingdiGuo_guo
收录专栏:C++干货专栏
铁汁们大家好呀,我是PingdiGuo_guo,今天我们来学习一下数组(一维)。
文章目录
1.数组的概念与思想
2.为什么要使用数组
3.数组的特性
4.数组的操作
1.定义
2.初始化
1.直接赋值
2.动态赋值
3.输出
1.正序输出
2.逆序输出
4.排序
1.冒泡法排序
1.步骤
2.图示
3.代码
2.sort排序
1.升序
2.降序
5.插入
1. 插入到头部
2. 插入到中间
3. 插入到尾部
6.遍历
1.具体步骤
7.查找
1.遍历查找
2.二分查找
8.数组的用处
9.练习
题目1
题目2
10.总结
1.数组的概念与思想
数组是一种数据结构,它是一组相同类型的元素的集合。在C++中,数组可以存储在连续的内存位置上,每个数组元素都有一个唯一的索引,通过索引可以访问和操作数组中的元素。
数组的思想是将一组相关的数据作为一个整体来处理,可以通过数组的索引来访问和操作数组中的元素,从而方便对数据进行存储、查找、排序等操作。
2.为什么要使用数组
数组可以记录很多数据,相比于变量,它的用处就更大了,举个例子,我们输入八个数:
//变量输入
cin>>a>>b>>c>>d>>e>>f>>g>>h;
//数组输入
for(i=0;i<8;i++)
{
cin>>a[i];
}
如上,当使用变量输入时,就比较费事,因为要一个一个的输入,而我们使用循环输入数组时,就不那么费事了。
3.数组的特性
数组(一维)有以下几个特性:
1.存储相同类型的元素:一维数组能够存储相同类型的元素,例如整数、浮点数、字符等。
2.连续的内存空间:数组的元素在内存中是连续存储的,这使得数组的访问非常高效。
3.大小固定:一维数组在创建时需要指定大小,且大小是固定的,无法动态改变。数组的大小一旦确定,就不能再改变。
4.使用索引访问元素:数组的元素可以通过索引来访问,索引从0开始,最大值为数组大小减1。例如,数组中的第一个元素可以通过索引0来访问。
5.隐式转换为指针:一维数组在访问时会隐式地转换为指针,即数组名可以被视为数组的第一个元素的地址。
6.初始化:可以在声明或定义数组时初始化元素,也可以在后续的代码中对数组元素进行赋值。数组的元素如果没有初始化,会被默认初始化为对应类型的默认值。
7.可以使用循环结构进行遍历:通过循环结构(如for循环)可以遍历整个数组,进行元素的访问、修改、查找、排序等操作。
4.数组的操作
1.定义
一维数组的定义格式如下:
int数组类型 a数组名[数组大小];
这样,我们就定义了一个名为a的数组。
注意:
1.数组大小可以是具体的数值,变量。
2.数组类型可以是其他类型。
2.初始化
数组(一维)的初始化有两种:
1.直接赋值
我们可以直接在代码里给数组赋值:
int a[10]={1,2,3,4,5,6,7,8,9}
注意:
1.赋值时,我们要用{}来括起来赋值。
2.数组的下标从0开始到n-1。
当然,也可以给单个数组元素赋值:
int a[10];
a[0]=1;
这时,我们就不需要大括号了。
2.动态赋值
动态赋值就是用循环输入数组元素,因为数组的元素有很多,所以只能用循环(除了数组大小比较小):
int a[10];
for(i=0;i<10;i++)
{
cin>>a[i];
}
3.输出
数组的输出也有两种方式:
1.正序输出
正序输出就是按输入顺序输出,只需要循环输出即可:
for(i=0;i<10;i++)
{
cout<<a[i]<<' ';
}
2.逆序输出
逆序输出和输入顺序相反,这种情况我们就只需要把i从n递减即可:
for(i=n-1;i>=0;i--)
{
cout<<a[i]<<' ';
}
这样,我们就完成了逆序输出。
4.排序
排序常见的有两种方法:
1.冒泡法排序
1.步骤
- 从待排序序列的第一个元素开始,依次比较相邻的两个元素。
- 如果前一个元素大于后一个元素,则交换这两个元素的位置,使较大的元素“冒泡”到后面。
- 继续向后比较,直到比较到最后一个元素,此时最大的元素已经冒泡到待排序序列的最后一个位置。
- 重复以上步骤,但是不再比较已经冒泡到末尾的元素。
- 重复执行步骤1-4,直到整个序列排序完成。
冒泡排序的时间复杂度是O(n^2),其中n是待排序序列的长度。虽然冒泡排序算法简单,但是对于大规模的数据排序效率较低,一般仅用于小规模数据的排序。
2.图示
3.代码
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;i++)//因为不用和自己比,所以j=i+1
{
if(a[i]>a[j])
{
swap(a[i],a[j]);//交换数组元素的值,swap函数
}
}
}
2.sort排序
1.升序
由于sort是库函数,我们需要导入头文件<algorithm>
,接下来直接展示代码:
sort(a+1,a+n+1);//我们从数组元素1输入的,所以两边都要加上1,a是数组名
2.降序
降序需要在小括号里加上greater<int>()以实现降序:
sort(a+1,a+n+1,greater<int>());
5.插入
插入数组元素有三种情况:头部、中间和尾部。下面是每种情况的步骤和C++代码示例:
1. 插入到头部
- 将数组中的所有元素向后移动一位;
- 将要插入的值赋给数组的第一个元素。
int arr[MAX_SIZE] = {2, 4, 6, 8, 10};
int size = 5;
int value = 1;
// 向后移动元素
for (int i = size; i > 0; i--) {
arr[i] = arr[i - 1];
}
// 将值插入头部
arr[0] = value;
size++;
2. 插入到中间
- 在要插入的位置后面的所有元素向后移动一位;
- 将要插入的值赋给指定位置的元素。
int arr[MAX_SIZE] = {2, 4, 6, 8, 10};
int size = 5;
int index = 2;
int value = 5;
// 向后移动元素
for (int i = size; i > index; i--) {
arr[i] = arr[i - 1];
}
// 将值插入指定位置
arr[index] = value;
size++;
3. 插入到尾部
- 将要插入的值赋给数组的最后一个元素;
- 更新数组的大小。
int arr[MAX_SIZE] = {2, 4, 6, 8, 10};
int size = 5;
int value = 12;
// 将值插入尾部
arr[size] = value;
size++;
6.遍历
遍历数组是指依次访问数组中的每个元素,可以使用循环结构(如for循环)来实现。下面是在C++中遍历数组的代码和具体步骤:
1.具体步骤
1. 首先,声明并定义一个数组,例如:int arr[5] = {1, 2, 3, 4, 5};。
2. 使用循环结构来遍历数组。一般来说,使用for循环是最常见的方法。例如:
for (int i = 0; i < 5; i++) {
// 访问数组元素
cout << arr[i] << " ";
}
在上述代码中,循环变量i从0开始,每次循环递增1,直到i小于数组大小(5)为止。循环体内的语句将依次访问数组的每个元素,并输出到控制台。
请注意,数组的大小在声明时确定,因此循环条件中的大小应与实际数组大小匹配,以避免访问越界。
7.查找
关于数组的查找,有两种方法:
1.遍历查找
我们可以遍历数组,查找特定值:
int i,t,h;//t为查找的值,h用来记录下标
cin>>t;
for(i=1;i<=n;i++)
{
if(a[i]==t)
{
h=i;
break;
}
}
2.二分查找
这里附一张插图,具体请参考C++二分查找。
8.数组的用处
1.存储和访问数据:数组提供了一种有效的方法来存储大量的数据,并通过索引快速访问和操作其中的元素。每个元素在数组中都有一个唯一的索引,通过索引可以直接访问对应位置的元素。
2.排序和搜索:数组可以用于实现各种排序和搜索算法,例如冒泡排序、快速排序、二分查找等。通过对数组中的元素进行排序,可以方便地进行搜索和查找特定的元素。
3.数据统计和分析:使用数组可以方便地对数据进行统计和分析。例如,可以使用数组来计算平均值、最大值、最小值等,并进行数据的聚合和分析。
4.数据结构的基础:数组是许多其他数据结构的基础,例如栈、队列和图等。这些数据结构都可以使用数组来实现底层的存储和操作。
9.练习
题目1
输入n个数,求出里面的最大和最小值,1<=n<=100。
我们可以使用max和min函数来解决此问题。
具体步骤:
1.首先,声明变量n,用来存储数字的个数。
2.输入数字的个数n,并将其存储在变量n中。
3.声明变量min和max,用来存储最小值和最大值。初始化min和max为第一个输入的数字。
4.使用循环来读取n个数字。
5.在每次循环中,输入一个数字,并将其存储在变量num中。
6.使用if语句判断num是否小于min,如果是,则更新min的值为num。
7.使用if语句判断num是否大于max,如果是,则更新max的值为num。
8.循环结束后,输出最小值min和最大值max。
#include <iostream>
#include <algorithm> // 包含max和min函数的头文件
#include <climits> // 包含INT_MAX和INT_MIN常量
using namespace std;
int main() {
const int MAX_SIZE = 100; // 数组的最大长度
int n; // 数字的个数
int arr[MAX_SIZE]; // 声明一个数组用于存储数字
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int minVal = INT_MAX; // 初始化最小值为最大整数
int maxVal = INT_MIN; // 初始化最大值为最小整数
for (int i = 0; i < n; i++) {
minVal = min(minVal, arr[i]); // 使用min函数更新最小值
maxVal = max(maxVal, arr[i]); // 使用max函数更新最大值
}
cout << minVal << endl; // 输出最小值
cout << maxVal << endl; // 输出最大值
return 0;
}
题目2
给你n个数,累加它们的和,1<=n<=100。
#include <iostream>
#include <algorithm> // 包含min和max函数
using namespace std;
int main() {
const int MAX_SIZE = 100; // 数组的最大长度
int n; // 数字的个数
int arr[MAX_SIZE]; // 声明一个数组用于存储数字
int sum = 0; // 初始化累加和为0
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
sum += arr[i]; // 累加每个输入的数字
}
cout << "Sum: " << sum << endl;
return 0;
}
10.总结
一维数组是一种基本的数据结构,可以用于存储和操作一组相同类型的数据。了解和熟练应用一维数组是编程中的基础知识之一。
本篇博客到这里就结束了,感谢大家的支持与观看,如果有好的建议欢迎留言,谢谢大家啦!