您的位置:首页 > 编程语言 > C语言/C++

杨氏矩阵中查找元素

2015-11-21 22:09 381 查看
在杨氏矩阵中查找一个元素是否存在
杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序
方法一:数组
#include<stdio.h>
#include<stdlib.h>
#define COLS 3
#define ROWS 3

//要查找只要在找到右上角的元素和输入元素进行比较。如果右上角元素大,即可排除其他行,若小 //,则可排除本行,继续循环,用输入元素和右上角的元素进行比较
int find(int arr[][COLS], int rows, int cols,int key)//形参不分配空间,可以省略ROWS
{
int row = 0;
int col = cols - 1;
while ((row <= 2) && (col >= 0))
{
if (arr[row][col] > key)
{
col--;
}
else if (arr[row][col] < key)
{
row++;
}
else
{
return 1;
}
}
return -1;
}
int main()
{
int arr[ROWS][COLS] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int ret;
int key ;
scanf("%d", &key);
ret= find(arr, ROWS, COLS, key);
if (ret == 1)
printf("exist\n");
else if (ret == -1)
printf("not exist\n");
system("pause");
return 0;
}
方法二:结构体
#include<stdio.h>
#include<stdlib.h>

struct Ret
{
int row;
int col;
};
#define COLS 3
#define ROWS 3

struct Ret find(int arr[][COLS], int rows, int cols,int key)//形参不分配空间,可以省略ROWS
{
int row = 0;
int col = cols - 1;
struct Ret ret;
while ((row <= 2) && (col >= 0))
{
if (arr[row][col] > key)
{
col--;
}
else if (arr[row][col] < key)
{
row++;
}
else
{
ret.col=col;
ret.row = row;
return ret;
}
}
ret.col = -1;
ret.row = -1;
return ret;
}
int main()
{
int arr[ROWS][COLS] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
struct Ret ret;
int key ;
scanf("%d", &key);
ret= find(arr, ROWS, COLS, key);
if (ret.col != -1)
{
printf("%d\n ", arr[ret.col][ret.row]);
printf("exist\n");
}

else if (ret.col == -1)
printf("not exist\n");
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 数组 结构体