编辑代码

#include<stdio.h>
#define Maxsize 10 //定义最大长度
typedef struct {
	int data[Maxsize];  //定义一个长度为Maxsize的数组用来存放数据元素
	int length;         //顺序表的当前长度
}SqList;

//基本操作——初始化一个顺序表
void InitList(SqList &L) {
	for (int i = 0;i < Maxsize;i++) {
		L.data[i] = 0;  //将所有数据元素设置为默认初始值0
	}
	L.length = 0;
}

void PrintList(SqList L) {
	for (int i = 0;i < L.length;i++) {
		printf("%d  ", L.data[i]);
	}

	printf("\n长度为%d  ", L.length);

}

void SetList(SqList &L, int i, int e) {
	L.data[i - 1] = e;
	L.length++;
}

//基本操作:插入元素
bool ListInsert(SqList &L, int i, int e) {
	if(i<1|| i>L.length+1){  //判断i的范围是否有效,无效返回false
		return false;
	}
	if (L.length >= Maxsize) {   //当前存储空间已满,不能插入
		return false;
	}
	for (int j = L.length;j >= i;j--) {
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = e;
	L.length++;
	return true;
}

//基本操作:删除位序为i的元素
bool ListDelete(SqList &L, int i, int &e) {
	if (i<1 || i>L.length) {
		return false;
	}
	e = L.data[i - 1];
	for (int j = i;j < L.length;j++) {
		L.data[j - 1] = L.data[j];
	}
	L.length--;
	return true;
}

//基本操作:按位查找
int GetElem(SqList L,int i) {
	return L.data[i - 1];//动态和静态都是用这一条查找
}
//删除列表中最小值并用最后一个元素替补
int Del_Min(SqList &L)
{
    if(L.length==0)return 0;
    int pos=0;
    int min=L.data[0];
    for(int i=1;i<L.length;i++){
        if(L.data[i]<min){
        min=L.data[i];
        pos=i;
        }
    }
    L.data[pos]=L.data[L.length-1];
    L.length--;
    return min;
}
//顺序表逆置
void Reserve(SqList &L){
    if(L.length==0) return;
    for(int i=0;i<L.length/2;i++){
        int temp=L.data[i];
        L.data[i]=L.data[L.length-i-1];
        L.data[L.length-i-1]=temp;
    }
}
//删除表中所有值为x的元素
bool Del_x(SqList &L,int x){
    int k=0;
    for(int i=0;i<L.length;i++){
        if(L.data[i]!=x){
            L.data[k++]=L.data[i];
        }
    }
    L.length=k;
    return true;
}
// 删除有序表中s-t的所有值
bool Del_s_t(SqList &L,int s,int t){
    int k=0;
    for(int i=0;i<L.length;i++){
        if(L.data[i]<=s||L.data[i]>=t){
               L.data[k++]=L.data[i];
        }
    }
    L.length=k;
    return true;
}
//删除有序表中重复元素保留不重复
bool Del_same(SqList &L){
    int i=0,j=1;
    for(j=1;j<L.length;j++){
        if(L.data[i]!=L.data[j]){
            L.data[++i]=L.data[j];
        }
    }
    L.length=i+1;
}
//两个有序表合成一个有序表
void Merge(SqList PA,SqList PB,SqList &PC){
    if(PA.length+PB.length>PC.length) return;
    int i=0,j=0,k=0;
    while(i<PA.length&&j<PB.length){
        if(PA.data[i]<PB.data[j]){
            PC.data[k++]=PA.data[i++];
        }
        else PC.data[k++]=PB.data[j++];
    }
    while(i<PA.length)
     PC.data[k++]=PA.data[i++];
    while(j<PB.length)
    PC.data[k++]=PB.data[j++];
    PC.length=k;
}
//数组放两个线性表分别逆置交换  (测试未成功)
// void ReserveAndMerge(A[],int left, int right ,int arraySize){
//     if(left>=right||right>=arraySize) return;
//     for(int i=0;i<(right-left+1)/2;i++)
//     {
//         int temp=A[left+i];
//         A[i+left]=A[right-i];
//         A[right-i]=temp;
//     }}
// void Exchange(A[],int m,int n, int arraySize){
//     ReserveAndMerge(A,0,m-1,arraySize);
//     ReserveAndMerge(A,m,m+n-1,arraySize);
//     ReserveAndMerge(A,0,m+n-1,arraySize);
// }
// }

void Search_x_Insert(SqList &L,int x){
    int low =0,high=L.length-1,mid;
    while(low<=high){
        mid=(low+high)/2;
        if(L.data[mid]==x)
        break;
        if(L.data[mid]<x)
        low=mid+1;
        else high=mid-1;
    }
   
    if(L.data[mid]==x&&mid!=L.length-1){
         int temp=L.data[mid];
         L.data[mid]=L.data[mid+1];
         L.data[mid+1]=temp;
    }
    if(low>high){
        for(int i=L.length-1;i>high;i--){
             L.data[i+1]=L.data[i];
            }
            L.data[high+1]=x;
        L.length++;
    }
}
int Search_mid(SqList A,SqList B){
    int i=0,j=0,k=0,mid=(A.length+B.length-1)/2;
    
    while(1){
        if(i < A.length && j < B.length){
        if(A.data[i]<=B.data[j]){
        if(k==mid)
        return A.data[i];
        k++;i++;
        }else{
            if(k==mid)
            return B.data[j];
            j++;k++;
        }
        }
        else{
            break;
            }
    }

}
int main() {
    
	SqList L;    //声明一个顺序表
	InitList(L);  //初始化顺序表
	SetList(L, 1, 1);
	SetList(L, 2, 2);
	SetList(L, 3, 3);
	SetList(L, 4, 3);
	SetList(L, 5, 5);
	SetList(L, 6, 6);
   
    SqList C;
    SqList LA={11,12,13,14,15};
    SqList LB={6,7,8,9,10};
     
    // int A[]={1,2,3,4,5,6,7,8};
    // ReserveAndMerge(A[],0,8,9);
    // Exchange(A[],4,4,8);
	
	//  PrintList(L);
    //  Del_Min(L);
    //  printf("\n=========\n");
    //  PrintList(L);
    //  Reserve(L);
    //  printf("\n=========\n");
    //  PrintList(L);
	// Del_x(L,3);
    // PrintList(L);
    // Del_s_t(L,2,5);
    // PrintList(L);
    // Del_same(L);
    // PrintList(L);
    // Merge(L,LA,C);
    // PrintList(C);
    // Search_x_Insert(L,5);
    // PrintList(L);
    int i= Search_mid(LB,LA);
    printf("%d",i);
	return 0;
}