30.有序表
作者:
knight9654
,
2022-12-06 11:42:23
,
所有人可见
,
阅读 217
int count = 0;
void input(int a[]){
int n;
scanf("%d",count);
for(int i = 0;i<n;i++){
scanf("%d",&a[i]);
}
}
void print(int a[]){
for(int i = 0;i<count;i++){
printf("%d",a[i]);
}
}
void insert(int a[],int value){
int i,j;
for(i = 0;i<count;i++){//顺序插入
if(value<a[i]){
break;
}
}
for(j = count -1;j>=i;j--){
a[j+1] = a[j];
}
a[i] = value;
count++;
print(a);
}
void remove(int a[],int value){
int i,index = -1;
for(i = 0;i<count;i++){
if(value == a[i]){
index = i;
break;
}
}
if(index == -1){
printf("wrong");
}else{
for(i = index;i<count -1;i++){//顺移删除法
a[i] = a[i+1];
}
}
count--;
print(a);
}
void query(int a[],int value){
// for(int i = 0;i<count;i++){
// if(a[i] == value){
// printf("find");
// break;
// }
// }
//二分查找
int mid,lef,rig;
lef = 0;
rig = count -1;
while(lef<rig){
mid = (lef+rig)/2;
if(value == a[mid]){
printf("%d",mid);
}
else if(value<a[mid]){
rig = mid-1;
}
else{
lef = mid +1;
}
}
}
void select(int a[],int option,int value){
switch(option){
case 1:
insert(a,value);
break;
case 2:
remove(a,value);
break;
case 3:
query(a,value);
break;
}
}
int main(){
int a;
int b[80];
int value;
input(b);
scanf("%d",a) ;
select(b,a,value);
}