#define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SqList;
//二分查找(有序表)非遞歸
int BinarySearch(SqList L,int x){
int low=0,high=L.length-1,mid;
while(low<=high){
mid=(low+high)/2;
if(L.data[mid]==x){
return mid;
}else if(L.data[mid]>x){
high=mid-1;
}else{
low=mid+1;
}
}
return -1;
}
//二分查找遞歸
int BinarySearchRec(SqList L,int x,int low,int high){
if(low>high)return -1;
int mid=(low+high)/2;
if(x>L.data[mid]){
return BinarySearchRec(L,x,mid+1,high);
}else if(x<L.data[mid]){
return BinarySearchRec(L,x,low,mid-1);
}else{
return mid;
}
}
//插入、刪除
bool ListInsert(SqList &L,int k,int x){
if(k<1||k>L.length+1||L.length>=MaxSize)return false;
//插入位置可以是1->n+1
for(int i=L.length;i>=k;i--){
L.data[i]=L.data[i-1];
}
L.data[k-1]=x;
L.length++;
return true;
}
bool ListDelete(SqList &L,int k,int &x){
if(k<1||k>L.length)return false;
//刪除位置是1->n
x=L.data[k-1];
for(int i=k;i<L.length;i++){
L.data[i-1]=L.data[i];
}
L.length--;
return true;
}
//就地倒置
void Reverse(SqList &L){
for(int i=0;i<L.length/2;i++){
int temp=L.data[i];
L.data[i]=L.data[L.length-1-i];
L.data[L.length-1-i]=temp;
}
}
//刪除所有值爲x的元素
void del_all_x(SqList &L){
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;
}
//刪除值在s與t之間的所有元素
void del_s2t(SqList &L){
int k=0;
for(int i=0;i<L.length;i++){
if(L.data[i]>=s&&L.data[i]<=t){
k++;
}else{
L.data[i-k]=L.data[i];
}
}
L.length-=k;
}
//刪除有序表中重複元素
void del_same(SqList &L){
int k=0;
for(int i=1;i<L.length;i++){
if(L.data[i]!=L.data[k]){
L.data[++k]=L.data[i];
}
}
L.length=k+1;
}
//合併兩個有序表
void Merge(SqList A,SqList B,SqList &C){
int i=0,j=0,k=0;
while(i<A.length&&j<B.length){
if(A.data[i]<=B.data[j]){
C.data[k++]=A.data[i++];
}else{
C.data[k++]=B.data[j++];
}
}
while(i<A.length)C.data[k++]=A.data[i++];
while(j<B.length)C.data[k++]=B.data[j++];
C.length=k;
}