顺序表应用6:有序顺序表查询
順序表應(yīng)用6:有序順序表查詢
Time Limit:?7MS?Memory Limit:?700KB Submit?StatisticProblem Description
順序表內(nèi)按照由小到大的次序存放著n個(gè)互不相同的整數(shù)(1<=n<=20000),任意輸入一個(gè)整數(shù),判斷該整數(shù)在順序表中是否存在。如果在順序表中存在該整數(shù),輸出其在表中的序號;否則輸出“No Found!"。Input
第一行輸入整數(shù)n,表示順序表的元素個(gè)數(shù);第二行依次輸入n個(gè)各不相同的有序整數(shù),代表表里的元素;
第三行輸入整數(shù)t,代表要查詢的次數(shù);
第四行依次輸入t個(gè)整數(shù),代表每次要查詢的數(shù)值。
Output
輸出t行,代表t次查詢的結(jié)果,如果找到在本行輸出該元素在表中的位置,否則本行輸出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
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <malloc.h>
#define LISTINCREASMENT 20012 ? ? ? ? ? ? ? ? /*每次分配元素的個(gè)數(shù)*/
#define ?LISTSIZE 20012 ? ? ? ? ? ? ? ? ? ? ? ? /*順序存儲的最大個(gè)數(shù)*/
#define ?OVERFLOW -1
#define ?OK 1
int n,m;
using namespace std;
typedef int ElemType;
typedef struct ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*順序表元素的的定義*/
{
? ? ElemType * elem;
? ? int length;
? ? int listsize;
} Sqlist;
int SqInitial(Sqlist &L) ? ? ? ? ? ? ? ? ? ? ? ? ? /*初始化線性表*/
{
? ? L.elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType));
? ? if (! L.elem) ?exit(OVERFLOW); //存儲分配失敗
? ? L.length=0;
? ? L.listsize=LISTSIZE;
? ? return OK;
}
int ListInsert(Sqlist &L,int i,ElemType e) ? ? ? ? ? ?/*插入元素*/
{
? ? if(i<1|| i > L.length+1) exit(-1);
? ? if(L.length>=L.listsize)
? ? {
? ? ? ? ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *sizeof(ElemType));
? ? ? ? if(!newbase) ? return ?OVERFLOW;// 當(dāng)前存儲空間已滿
L.elem=newbase;
? ? ? ? L.listsize+=LISTINCREASMENT; ? ? ? ? /*表的容量不足分配內(nèi)存*/
? ? }
? ? ElemType * ?q=&(L.elem[i-1]);
? ? ElemType * ?p;
? ? for(p=&(L.elem[L.length-1]); p>=q; --p)
? ? ? ? *(p+1)=*p;
? ? *q=e;
? ? ++L.length;
? ? return OK;
}
void display(Sqlist &L)
{
? ? int i;
? ? for(i=0;i<L.length-1;i++)
? ? {
? ? ? ? cout<<L.elem[i]<<" ";
? ? }
? ? ?cout<<L.elem[i]<<endl;
}
int query(Sqlist &L,int i,int j,int key)
{
? ? int mid;
? ? while(i<=j)
? ? {
? ? ? ? mid = (j+i)/2;
? ? ? ? /*cout<<"L.elem[mid]=="<<L.elem[mid]<<endl;
? ? ? ? cout<<"L.elem[i]=="<<L.elem[i]<<endl;
? ? ? ? cout<<"L.elem[j]=="<<L.elem[j]<<endl;
? ? ? ? */
? ? ? ? if(L.elem[mid]==key)
? ? ? ? ? ? return mid+1;
? ? ? ? if(L.elem[mid]<key)
? ? ? ? {
? ? ? ? ? ? i = mid+1;
? ? ? ? }
? ? ? ? if(L.elem[mid]>key)
? ? ? ? {
? ? ? ? ? ? j = mid-1;
? ? ? ? }
? ? }
? ? return -1;
}
int main()
{
? ? Sqlist L,L1,L2;
? ? int t =1 ,d;
? ? cin>>n;
? ? SqInitial(L);
? ? //printf("構(gòu)建長度為len的順序表。\n");
? ? for(t=1; t<=n; t++) ? ? ? ? ? ? ? ? ? ? ? ? /*構(gòu)建長度為n的順序表*/
? ? {
? ? ? ? //printf("Please input the %dth list elem:",t);
? ? ? ? scanf("%d",&d);
? ? ? ? ListInsert(L,t,d);
? ? }
? ? cin>>m;
? ? while(m--)
? ? {
? ? ? ? scanf("%d",&t);
? ? ? ? d = query(L,0,n-1,t);
? ? ? ? if(d==-1)
? ? ? ? ? ? cout<<"No Found!"<<endl;
? ? ? ? else
? ? ? ? ? ? cout<<d<<endl;
? ? }
return 0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/CCCrunner/p/6444613.html
總結(jié)
以上是生活随笔為你收集整理的顺序表应用6:有序顺序表查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS开发技巧(系列十八:扩展UICol
- 下一篇: 八字个性签名伤感短句