数组的算法与基础

本文详细介绍了pandas库的基础知识,以及一维和二维数组的定义、初始化、打印方法,包括字符串处理和二分查找算法的应用实例。通过实例演示了如何在C++中操作数组并展示相关技巧。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


数组的定义及初始化

一维数组:

1.定义整型的数组,数组元素用大括号{}来引用

2.计算元素所占的内存用sizeof来进行求解 ,对于单个字符的个数计算(见上) 

3.特别注意:对于字符串的求长度用strlen(arr),头文件为#include<string.h>

二维数组

1.二维数组的[2]代表有俩排,[3]代表每排有三个 元素

2.二维数组的 不完全初始化,是把一维数组作为元素的数组,如果在元素内加大括号{},则说明将一维数组作为元素来定义,从左到右,从下到上.

3.二维数组可以按照元素初始化,也可以按照行数初始化.(对于行数初始化,里面的元素要加大括号)

4.注意:二维数组的长度声明永远不能省略,int char[] [5];

二维数组的打印

int main()
{
    int arr[3][5]={0};
    int i= 0;
    for(i=0;i<3;i++)
    {
       int j = 0;
       for(j=0;j<5;j++)
       {
       scanf("%d",&arr[][]);
       }

    }
    for(i=0;i<3;i++)
    {
       int j = 0;
       for(j=0;j<5;j++)
       {
       printf("%d",&arr[][]);
       }
     }
     return 0;
}

注意事项:对于二维数组的打印,先定义的变量,利用for循环,再在for循环的内部定义的变量,再次在for的循环 里面嵌套for循环,随后利用scanf函数进行元素的输入,重复列和行的循环,最后利用print 

函数完成打印.

巧用计算元素的个数来打印

int main()
{
  int arr[]={1,2,3,4,5,6,7,8,9,10};
  printf("%zd",sizeof(arr))
  int sz = sizeof(arr) / sizeof(arr[0]);//对于整个数组,arr后面可以什么都不写,arr[]
  int a = 0;
  for(a=0;a<sz;a++)
  {
   printf("%d",arr[a])

  }

  return 0;

}

计算数组长度的时候,最好用%zd来 打印

打印数组的地址

int  main()
{
	int arr[2][3] = { 0 };
	int i = 0;
	for (i = 0;i <2 ;i++)
	{
		int j = 0;
		for(j=0;j<3;j++)
		printf("&arr[%d][%d]=%p\n", i,j, &arr[i][j]);
	}
	printf("\n");
	return 0;
}

1.注意给数组打印的地址,要为数组加上取地址符号&

2.arr[ ]里面的占位符用%d,这里代替的是前面行列所对应的下标,

3.%p作为占位符则是对应的所打印数组的地址

一、二分查找的应用

示例:二分查找的定义

二分搜索算法是一种在有序数组中查找特定元素的有效方法。其基本思想是通过将搜索区间分成两半,然后根据目标值与中间元素的比较结果来选择搜索的半区,从而逐步缩小搜索范围,直到找到目标值或确定目标值不存在。

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 0;
	scanf("%d", &k); 
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1; 
	int flag = 0;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid + 1;
		}
		else if (arr[mid] == k)
		{
			printf("找到了,下标为%d\n", mid);
			flag = 1;
			break;
		}
	}
   
		if(flag==0)
	{
		printf("找不到\n");

	}
	return 0;
}

对于这里面的right 和 left都是指的是数组的下标,写的时候注意!!

利用下标的范围逐渐变小,最后锁定所要查找的数的下标

二 字符串两边打印,逐渐替换字符

1.引入库

库函数代码如下(示例):

#include<string.h>
#include<Windows.h>
#include<stdlib.h>

最上面:用来计算字符串的长度,strlen(arr1)

中间:通过控制Windows系统    system("cls");  cls负责 清空台面所有内容

最下面:我们可以控制休眠时间,也就是可以调整打印的速度和节奏,Sleep(1000);//休眠1000毫秒

2.读入数据

代码如下(示例):

int main ()
{
   char arr[1]="hello bit!!!!!!!!!!" ;
   char arr[2]="*******************" ;
   int left = 0;
   int right = strlen(arr1) - 1;
   while(left<right)
   {
      arr2[left] = arr1[left];
      arr2[right] = arr1[right];
      printf("%s\n", arr2);
      Sleep(1000);
      system("cls");
      left++;
      right--;

   }
 printf("%s",arr[1]);
 return 0;
}

注意:

1.对于left的定义是整形数字,相当与数组后的下标.表示最开始的为arr[left]

2.对于字符串的打印用%s来打印

3.运行起来防止最后一步直接被清除,我们再用printf函数将之前的继续打印一遍


总结

以上就是和大家分享的数组的内容,整体难度不是特别大,其中对于二维数组的打印也是用到了咱们之前学到的for循环及其嵌套来完成实现,比较突出数组特色的就是二分查找,铁铁自己也是调试研究了好长时间,先就和大家分享到这里,文章中有什么问题可以评论区多多交流,一起讨论,互相进步,你们的支持和喜欢是我坚持下去的动力,感谢大家的点赞和关注!!!!!

谢谢大家!!!!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值