寻找相同元素的指针

此实例的要求是在两个已经摆好顺序的数组寻找第一个相同的元素在第一个数组中的指针。

这个实例的思想比较好,如果我来做的话,就是先从第一个数组的第一个元素开始,每次取出一个元素,与第二个数组的每一个元素进行比较,当元素值相等的时候,返回元素的指针。

但是在此实例中,使用了另外一种思想,在我看来降低了程序的时间复杂度。其思想为:由于两个数组都已经排好顺序,则分别从两个数组的第一个元素开始,比较大小,将较小的元素的数组的位置指向下一个,知道找到相同的元素为止。

下面我程序的实现部分:

#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;
}

下面是我的程序的运行结果:

时间: 2024-11-13 06:43:22

寻找相同元素的指针的相关文章

寻找制定元素的指针

<span style="font-size:18px;">#include<stdio.h> int search(int *apt,int n,int key)/*返回在数组中和key值相等值的下标*/ { int *p; for(p=apt;p<apt+n;p++) { if(*p==key) return p-apt; } return NULL;/*不可以在if下面直接else,因为得循环找出和key值相同的值,遍历完了发现没有才返回null*/

寻找指定元素

在已知数表中找出第一个与指定值相等的元素的下标和指针.这个实例还是比价简单的. 我的思路是,首先创建一个struct结构,该结构中有两个成员变量,一个是数组元素的下标,一个是数组元素的指针值,当程序进程查找的时候,将找到的结果保存到该结构上.下面是我的程序的实现部分: #include <stdio.h> #define SIZE 100 /** * @brief The element struct * 元素的结构,包括元素的下标和元素的指针 */ struct element{ int s

鼠标移到元素上指针变为不可用状态

鼠标移到元素上指针变为不可用状态:鼠标的指针状态与很多种,分别代表着不同的含义,下面介绍一下如何实现当鼠标悬浮于一个元素的时候,鼠标指针会变味不可用状态,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" />

编程题:比较指向数组元素的指针变量和指向数组的指针变量的不同。

#include<stdio.h> void main() {int a[2][3]={1,2,3,4,5,6}; int *p1,(*p2)[3]; /*p1指向数组元素,p2指向包含3个元素的一维数组*/ p1=a[0];p2=a; /*用指向数组元素的指针变量输出二维数组元素*/ for(;p1<a[0]+6;p1++) printf("%4d",*p1); printf("\n"); /*用指向以为数组的指针变量输出二维数组元素*/ for

编程题:指向二维数组元素的指针变量。功能:已知二维数组a[2][3],输入输出全部元素。

#include<stdio.h> void main() { int a[2][3],i,j; int *p; /*用坐标法输入二维数组元素*/ for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); /*用指针法输出二维数组元素*/ p=a[0];         /*等价于p&a[0][0];*/ for(;p<a[0]+6;p++)   printf("%4d&quo

寻找多数元素/主元素问题

问题描述: 令a[1..n]是一个整数序列,a中的整数x如果在a中出现的次数多于n/2,那么x称为多数元素. 设计一个性能比较优异的算法求解这个问题,找出一个整数序列中的多数元素.当然多数元素要么不存在,要么就只有一个 算法描述: 解决这个问题有好多种方法,蛮力方法就是把序列中的每个元素和其他每个元素比较,并且对每个元素计数,如果某个元素的计数大于n/2,就可以判断它是多数元素,否则无多数元素.但是这样的比较次数是n(n-1)/2=O(n^2),复杂度高.比较有效的算法是先对这些元素排序,并且计

[C++程序设计]指向数组元素的指针

如果先使p指向数组a的首元素(即p=a),则: (1) p++(或p+=1).使p指向下一元素,即a[1]. 如果用*p,得到下一个元素a[1]的值. (2) *p++.由于++和*同优先级,结合方向为自右而 左,因此它等价于*(p++).作用是: 先得到p指向 的变量的值(即*p),然后再使p的值加1.例6.5(3)程序中最后一个for语句: for(p=a;p<a+10;p++) cout<<*p;可以改写为for(p=a;p<a+10;) cout<<*p++;

寻找自适应元素(15)-迭代计算

寻找自适应元素(15)-迭代计算 设计要点:excle.界面.自动调整 秀秀:其实,还有一个更厉害的呢 阿金:更厉害的? 秀秀:嗯哪 阿金:哪个? 秀秀:就是设置"自动重算"旁边的"迭代计算"! 阿金:噢. 秀秀:透视表做不到吧? 阿金:这--

寻找自适应元素(16)-自动向下填充公式

寻找自适应元素(16)-自动向下填充公式 设计要点:excle.界面.自动调整 秀秀:还有一个功能特别强大. 阿金:什么? 秀秀:自动向下填充公式. 阿金:嗯,说实话,这个功能非常有用. 秀秀:你也知道? 阿金:当然!因为透视表也可以有这个功能!只要配合"导入外部数据"就行. 秀秀:但是,俺说的就没有那么多附加条件,只要在"工具"-"选项"-"编辑"里设置"扩展数据区域格式和公式"就OK啦. 阿金:啊,又算