C++一维数组
个人主页:PingdiGuo_guo
收录专栏:C++干货专栏
铁汁们大家好呀,我是PingdiGuo_guo,今天我们来学习一下数组(一维)。
文章目录
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.总结
一维数组是一种基本的数据结构,可以用于存储和操作一组相同类型的数据。了解和熟练应用一维数组是编程中的基础知识之一。
本篇博客到这里就结束了,感谢大家的支持与观看,如果有好的建议欢迎留言,谢谢大家啦!
原文地址:https://blog.csdn.net/PingdiGuo_guo/article/details/136029490
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!