此实例的要求是在两个已经摆好顺序的数组寻找第一个相同的元素在第一个数组中的指针。
这个实例的思想比较好,如果我来做的话,就是先从第一个数组的第一个元素开始,每次取出一个元素,与第二个数组的每一个元素进行比较,当元素值相等的时候,返回元素的指针。
但是在此实例中,使用了另外一种思想,在我看来降低了程序的时间复杂度。其思想为:由于两个数组都已经排好顺序,则分别从两个数组的第一个元素开始,比较大小,将较小的元素的数组的位置指向下一个,知道找到相同的元素为止。
下面我程序的实现部分:
~~~
#include <stdio.h>
#define NULL 0
/**
* 在已知两个从小到大的有序数组中寻找出现的相同的
* 元素在第一个数组中的指针
*
* 思想:
* 由于两个数组是已经拍好顺序的,所以可以这样:
* 从两个数组的第一个元素开始,比较两个数组的元素
* 较小的元素的数组位置向下移动,知道找到相等的元素
*/
/**
* @brief search 找到两个数组中第一个相同的元素的指针
* @param array1 第一个数组
* @param n1 第一个数组的长度
* @param array2 第二个数组
* @param n2 第二个数组的长度
* @return 返回两个数组第一个相同元素在第一个数组中的指针
*/
int search(int *array1,int n1,int *array2,int n2){
int *p1 = array1;
int *p2 = array2;
while(p1 < array1+n1 && p2 < array2+n2){
if(*p1 < *p2){
printf("*p1 < *p2\n");
p1++;
}else if(*p1 > *p2){
printf("*p1 > *p2\n");
p2++;
}else{
printf("*p1 = *p2\n");
return p1;
}
}
return NULL;
}
int main(void)
{
int n1,n2; //The length of the first and the second array
int i;
printf("Please enter the length of the first array:\n");
scanf("%d",&n1);
int array1[n1];
printf("Please enter the first array:\n");
for(i = 0;i < n1;i++)
scanf("%d",&array1[i]);
printf("Please enter the length of the second array:\n");
scanf("%d",&n2);
int array2[n2];
printf("Please enter the second array:\n");
for(i = 0;i < n1;i++)
scanf("%d",&array2[i]);
printf("The first array is :\n");
for(i = 0;i < n1;i++)
printf("%d\t",array1[i]);
printf("\n");
printf("The second array is :\n");
for(i = 0;i < n1;i++)
printf("%d\t",array2[i]);
printf("\n");
int p = search(array1,n1,array2,n2);
if(p)
printf("The pointer of the first same element in the first array is:\n%d",p);
else
printf("not found!!\n");
return 0;
}
~~~
下面是我的程序的运行结果:
![这里写图片描述](https://box.kancloud.cn/2016-05-24_5743c0757ac8b.jpg "")
- 前言
- 实例一:HelloWorld
- scanf函数学习
- 实数比较
- sizeof()保留字获取类型的大小
- 自增/自减学习
- C学习if条件判断和for循环
- C实现的九九乘法表
- C实现一个比较简单的猜数游戏
- 使用C模拟ATM练习switch..case用法
- 记录一个班级的成绩练习一维数组
- C数组实现矩阵的转置
- C二维数组练习
- 利用数组求前n个质数
- C实现万年历
- C实现数组中元素的排序
- C实现任意进制数的转化
- C判断一个正整数n的d进制数是否是回文数
- C使用递归实现前N个元素的和
- 钢材切割问题
- 使用指针比较整型数据的大小
- 指向数组的指针
- 寻找指定元素
- 寻找相同元素的指针
- 整数转换成罗马数字
- 字符替换
- 从键盘读入实数
- C实现字符行排版
- C实现字符排列
- C实例--判断一个字符串是否是回文数
- 通讯录的输入输出
- 扑克牌的结构定义
- 使用“结构”统计学生成绩
- 报数游戏
- 模拟社会关系
- 统计文件中字符个数
- C实现两个文件的内容输出到同一个屏幕