顺序表应用6:有序顺序表查询

Time Limit: 7MS Memory Limit: 700KB
Submit Statistic

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

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <malloc.h>
#define LISTINCREASMENT 20012                 /*每次分配元素的个数*/
#define  LISTSIZE 20012                         /*顺序存储的最大个数*/
#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;// 当前存储空间已满

L.elem=newbase;
        L.listsize+=LISTINCREASMENT;         /*表的容量不足分配内存*/
    }
    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("构建长度为len的顺序表。\n");
    for(t=1; t<=n; t++)                         /*构建长度为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;
}

转载于:https://www.cnblogs.com/CCCrunner/p/6444613.html

顺序表应用6:有序顺序表查询相关推荐

  1. 有序边表算法----计算机图形学

    有序边表算法: 有序边表算法的基本思想是:用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点.将这些交点按照x坐标排序,将排序后的点两两成 ...

  2. 顺序表-有序顺序表表示集合-并集(两者比较,小者放入C,未遍历继续放入)

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 分析: 这里有序的顺序表,可 ...

  3. 顺序表-有序顺序表表示集合-交集(while + 值比较)

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 分析: 前面的顺序表是没有在 ...

  4. [SDUT](3329)顺序表应用5:有序顺序表归并 ---有序表归并(线性表)

    顺序表应用5:有序顺序表归并 Time Limit: 100MS Memory Limit: 880KB Submit Statistic Discuss Problem Description 已知 ...

  5. 顺序表应用5:有序顺序表归并

    题目描述 已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A.B表里所有元素,并且C表仍然保持有序. 输入 输入分为三行: 第一行输入m.n(1 ...

  6. 递增有序顺序表的插入 (20分) 实验目的:1、掌握线性表的基本知识 2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置

    递增有序顺序表的插入 (20分) 实验目的:1.掌握线性表的基本知识 2.深入理解.掌握并灵活运用线性表.3.熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置 ...

  7. 6-2 有序顺序表的插入

    本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序 ...

  8. 顺序表——有序顺序表的插入

    本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序 ...

  9. ¥1-1 SWUST oj 941: 有序顺序表的合并操作的实现

    有序顺序表的合并操作的实现 题目描述 源代码 题目描述 源代码 #include<iostream> #include<malloc.h> using namespace st ...

最新文章

  1. hdu2036(多边形面积)
  2. 深刻理解Python中的元类(metaclass)以及元类实现单例模式
  3. 如何使用React Hook
  4. mysql isam参数优化_MySQL MyISAM优化设置点滴
  5. 信安 | 网上吵个架都能被封号?是“黑科技”还是“黑产”?
  6. Centos中查找文件、目录、内容
  7. rufus中gpt和mrb磁盘_计算机关于磁盘的大杂烩
  8. 让Android Studio支持系统签名(证书)
  9. 基于机器视觉的铁片轮廓检测
  10. 【创建型】Prototype模式
  11. linux挂载安卓手机命令,Android开发中,mount指令的各种用法大全,挂载设备的各种配置...
  12. 基于新标注模式的实体和关系联合抽取方法(Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme)
  13. Dependency Walker
  14. ffmpeg转码命令
  15. Java技术体系概述
  16. VirtualBox基础使用教程
  17. tp6 阿里云短信接口 php
  18. 计算机科学导论二分法实验报告,二分法上机实验报告.doc
  19. 计算机接口接触不良,如何处理电脑耳机插口接触不良
  20. 【java网络】常用网络模型BIO

热门文章

  1. 模拟频率和数字频率的区别
  2. 数据库_数据库篇-第一章:数据库基本概念
  3. 电大计算机应用,(2016年电大)电大全国计算机应用考试网考.doc
  4. android 不固定指示器,Android简单的页面指示器
  5. 组态王怎么做超级曲线_鲁班修图:一款超级好用的修图软件
  6. php while 存钱,php趣味编程 -php存钱的问题
  7. android get请求最长字符,Android OKHTTP3的GET和POST方法(带basic auth)
  8. Java gdal .mif/.mid文件读取
  9. 如何快速设计元器件原理图库和PCB封装库?
  10. GitHub分享《深度学习500问》优质资源