#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
相关资源:JAVA上百实例源码以及开源项目