此實例的要求是在兩個已經擺好順序的數組尋找第一個相同的元素在第一個數組中的指針。
這個實例的思想比較好,如果我來做的話,就是先從第一個數組的第一個元素開始,每次取出一個元素,與第二個數組的每一個元素進行比較,當元素值相等的時候,返回元素的指針。
但是在此實例中,使用了另外一種思想,在我看來降低了程序的時間復雜度。其思想為:由于兩個數組都已經排好順序,則分別從兩個數組的第一個元素開始,比較大小,將較小的元素的數組的位置指向下一個,知道找到相同的元素為止。
下面我程序的實現部分:
~~~
#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;
}
~~~
下面是我的程序的運行結果:

- 前言
- 實例一: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實現兩個文件的內容輸出到同一個屏幕