码迷,mamicode.com
首页 > 其他好文 > 详细

杨氏矩阵中查找元素

时间:2015-11-21 22:49:24      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:c语言   数组   结构体   

在杨氏矩阵中查找一个元素是否存在

杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序

方法一:数组

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


本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1715611

杨氏矩阵中查找元素

标签:c语言   数组   结构体   

原文地址:http://10797127.blog.51cto.com/10787127/1715611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!