*这是由Google Adsense推荐的一个广告,并不代表本站的观点。

目前想出个算法系列的吧.....

从数组开始吧

数组,众所周知每个语言都有嘤嘤嘤

所以数组是最好用的数据结构

例如说C++的.....

#include<iostream>
using namespace std;
int main()
{
    int a[10];
    return 0;
}

这段代码大概讲的就是新建一个整形的数组,大小为10。

然后呢.....

你创建的数组在内存里是这样表示的...

差不多就像这样(别嫌弃我的字嘤嘤嘤)

它们是不可分割的

就像香港澳门台湾和我们祖国不可分割一样(抱歉偏题了嘤嘤嘤)

1.遍历数组

遍历数组这比较简单

在C++下只要用个for循环就行

注意!如果是实际运用,还得要看看长度再下手呢嘤嘤嘤

#include<iostream>
using namespace std;
int main()
{
    int a[10]={1,23,4,5,34,24,34,22,11,3};
    for(int i=0;i<10;i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
}

输出结果

1 23 4 5 34 24 34 22 11 3 

测试可以去https://www.luogu.com.cn/ide(某谷IDE)

2.插入元素

插入元素可以从3种情况来看嘤嘤嘤

2.1 头部插入

如果是头部插入,这个要把各个数移动后面一位然后解决问题,但是啊,前提是必须要知道这个数组的长度,否则没办法用for......

差不多就像这样

就是把数组的每个数往后移动一位嘛.....

看看代码实现

#include<iostream>
using namespace std;
int main()
{
	int array[1000]; 
	int inserted=6;//加入的数 
    int a[10]={2,3,2,1,3,44};
	//核心代码
	int backup[100];
	for(int i=0;i<6;i++)//可以用一个变量的 
	{
		backup[i]=a[i];
	}
	for(int i=0;i<=6;i++)
	{
		if(i==0)
		{
			a[i]=inserted;
			continue;
		}
		a[i]=backup[i-1];
	}
    for(int i=0;i<7;i++)
    {
         cout<<a[i]<<" ";
    }
    return 0;
}

结果的话,不出意料应该是这样

6 2 3 2 1 3 44

2.2 中部插入

这个可以根据2.1的来借鉴一下[滑稽]

中部插入比头部插入麻烦了一点儿,中部插入要考虑它怎么遍历backup的数组的

代码奉上

#include<iostream>
using namespace std;
int main()
{
	int array[1000]; 
	int inserted=6;//加入的数 
	int weizhi=2;//加入的位置 
    int a[10]={2,3,2,1,3,44};
	//核心代码
	int backup[100];
	for(int i=0;i<6;i++)//可以用一个变量的 
	{
		backup[i]=a[i];
	}
	for(int i=0;i<=6;i++)
	{
		if(i>weizhi)
		{
			a[i]=backup[i-1];		
			continue;
		}
		if(i==weizhi)
		{
			a[i]=inserted;		
			continue;
		}
		a[i]=backup[i];
	}
    for(int i=0;i<7;i++)
    {
         cout<<a[i]<<" ";
    }
    return 0;
}

没有什么意外的话...代码运行结果应该是这个亚子的

2 3 6 2 1 3 44 

3.3 尾部插入

这个是特别爽了啊!!!

直接从后面加入

直接一行代过了呜呜呜呜~

#include<iostream>
using namespace std;
int main()
{
	int array[1000]; 
	int inserted=6;//加入的数 
	int length=6;//长度,这个数组的长度是6,所以就是6。 
    int a[10]={2,3,2,1,3,44};
	//核心代码
	a[length]=inserted;//length就是这个数组的长度 
	/*
	解释一下啊
	因为C++数组下标是从0开始的,所以不用+1了 
	*/ 
    for(int i=0;i<7;i++)
    {
         cout<<a[i]<<" ";
    }
    return 0;
}

运行结果是这个鸭子

2 3 2 1 3 44 6 

3.删除元素

删除元素的话可以跟添加元素一起考虑

不用跟添加元素那样麻烦到底了

只要有这样的思路就可以了

代码奉上

#include<iostream>
using namespace std;
int main()
{
	int a[10]={2,1,3,4,5,3};//原数组 
	int length=6;//长度 
	int deleted=0;//删除的下标 
	//核心代码
	a[deleted]=0;
	for(int i=deleted+1;i<length;i++)
	{
		a[i-1]=a[i];
	}
	//输出
	for(int i=0;i<length-1;i++)
	{
		cout<<a[i]<<" ";
	 } 
	return 0;
}

运行之后是这个亚子

1 3 5 4 3 

4.总结

数组的时间复杂度是这个亚子的...

类型↓ 操作→加入删除遍历查找
数组O(n)[头部和中部]O(1)[尾部] O(1~n)O(n)O(1)

总结一下吧

数组因为加入和删除都很耗时间,所以只能用于读多写少而且是加入只加后面的场景,如果想要加入和删除快,就要用链表了....

我们下期再见(嘤嘤嘤)


科技为主,游戏为辅。技术肥宅,喜欢看番。