文档章节

寻找相同元素的指针

陈洪波
 陈洪波
发布于 2015/05/19 19:34
字数 627
阅读 2
收藏 0

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

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

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

下面我程序的实现部分:

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

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

这里写图片描述

本文转载自:http://blog.csdn.net/hongbochen1223/article/details/45720029

陈洪波
粉丝 2
博文 76
码字总数 1552
作品 0
济南
程序员
私信 提问
每周一练 之 数据结构与算法(LinkedList)

这是第三周的练习题,原本应该先发第二周的,因为周末的时候,我的母亲大人来看望她的宝贝儿子,哈哈,我得带她看看厦门这座美丽的城市呀。 这两天我抓紧整理下第二周的题目和答案,下面我把...

pingan8787
04/22
0
0
C++:STL常用函数模块总结(set)

Set Sets是一个储存元素的容器,其中每个元素最多只出现一次,元素的遵循一个特定的顺序。元素一旦被放入次容器将不能被修改(修改元素的值),但是可以对元素进行插入和移除操作。Set内部的...

oldpan
2017/10/23
0
0
找到好工作之 LeetcodeTop100(Easy) by JavaScript

记录一下 leetcode top100 该部分只记录 easy 难度,由于为 easy 难度,故基本直接放解答 1. two sum 两数和 - 找到无序数组中和为定值的两个数,返回下标 因为需要返回下标,因此先排序后用...

眷你
2018/11/05
0
0
LeetCode 287. Find the Duplicate Number (寻找重复数)

原题 Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is o......

dby_freedom
2018/12/05
0
0
Clang array of pointer and pointer of arrayC语言数...

在C语言中有数组指针与指针数组这两个概念,相同的字与相同字符数,前后反转后意思就不一样了 数组指针,本质即是一个指针,这个指针指向一个数组(是整个数组),指针类型与元素个数要与指向的...

wape-yang
2013/09/21
48
0

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
今天
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
3
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
5
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部