<sdut-ACM>顺序表应用6:有序顺序表查询

Problem Description
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
Input
 第一行输入整数n,表示顺序表的元素个数;
第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
Output
 输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
Example Input
10
1 22 33 55 63 70 74 79 80 87
4
55 10 2 87
Example Output
4
No Found!
No Found!
10
Hint



#include
   
   
    
    
#include
    
    
     
     
#define maxsize 20000

int i;
typedef int element;
typedef struct
{
	element *elem;
	int length;
	int listsize;
}sqlist;

int intilist(sqlist *l)
{
	l->elem = (element *)malloc(sizeof(element));
	if(!l->elem) return -1;
	l->length = 0;
	l->listsize = maxsize;
	return 0;
}

void listinsert(sqlist *l, int n)
{
	for(i = 0; i <= n-1; i++)
		scanf("%d",&l->elem[i]);
	l->length = n;
}

int search(sqlist *l, int s, int r, int key)
{
	if(s <= r)
	{
		int mid = s + (r-s)/2;
		if(l->elem[mid] == key)
			return mid;
		if(key < l->elem[mid])
			return search(l, s, mid-1, key);
		else
			return search(l, mid+1, r, key);
	}
	return -1;
}

int main()
{
	int n, m;
	sqlist l;
	int t, key;
	scanf("%d",&n);
	intilist(&l);
	listinsert(&l, n);
	scanf("%d",&m);
	while(m--)
	{
		scanf("%d",&key);
		t = search(&l, 0, n-1, key);
		if(t == -1)
			printf("No Found!\n");
		else
			printf("%d\n",t+1);
	}
	return 0;
}


    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值