本题要求实现4个函数,分别在有序表(数组)中插入、删除、修改、查找一个值。 函数接口定义: int insert(int a[ ], int value); int del(int a[ ], int value); int modify(int a[ ], int value1, int value2); int query(int a[ ], int value); 函数insert在有序数组a中插入一个值为value的元素,如果在数组a中已有值为value的元素,则返回-1。 函数del删除有序数组a中等于value的元素,如果在数组a中没有找到值为value的元素,则返回-1。 函数modify将有序数组a中等于value1的元素,替换为value2 ,如果在数组a中没有找到值为value1的元素或者value2已在数组a中存在,则返回-1。 函数query用二分法在有序数组a中查找元素value,如果找到,则返回相应的下标;如果没有找到,则返回-1。
时间: 2024-02-05 16:13:01 浏览: 128
顺序表的基本操作,如查找,删除,插入,排序
下面是函数的实现:
```c++
//在有序数组a中插入一个值为value的元素,如果在数组a中已有值为value的元素,则返回-1
int insert(int a[], int value) {
int i = 0;
//查找value在数组中应该插入的位置
while (a[i] < value && i < MAX_SIZE) {
i++;
}
//如果数组中已有值为value的元素,则返回-1
if (a[i] == value) {
return -1;
}
//将value插入数组中
for (int j = MAX_SIZE - 1; j > i; j--) {
a[j] = a[j - 1];
}
a[i] = value;
return 0;
}
//删除有序数组a中等于value的元素,如果在数组a中没有找到值为value的元素,则返回-1
int del(int a[], int value) {
int i = 0;
//查找value在数组中的位置
while (a[i] < value && i < MAX_SIZE) {
i++;
}
//如果数组中没有值为value的元素,则返回-1
if (a[i] != value) {
return -1;
}
//将value从数组中删除
for (int j = i; j < MAX_SIZE - 1; j++) {
a[j] = a[j + 1];
}
a[MAX_SIZE - 1] = 0;
return 0;
}
//将有序数组a中等于value1的元素,替换为value2 ,如果在数组a中没有找到值为value1的元素或者value2已在数组a中存在,则返回-1
int modify(int a[], int value1, int value2) {
int i = 0;
//查找value1在数组中的位置
while (a[i] < value1 && i < MAX_SIZE) {
i++;
}
//如果数组中没有值为value1的元素,则返回-1
if (a[i] != value1) {
return -1;
}
//如果value2已在数组中存在,则返回-1
if (query(a, value2) != -1) {
return -1;
}
//将value1替换为value2
a[i] = value2;
return 0;
}
//用二分法在有序数组a中查找元素value,如果找到,则返回相应的下标;如果没有找到,则返回-1
int query(int a[], int value) {
int left = 0, right = MAX_SIZE - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == value) {
return mid;
}
else if (a[mid] < value) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
```
其中,MAX_SIZE是数组的最大长度,可以根据实际情况进行修改。函数的返回值为0表示操作成功,返回-1表示操作失败。
阅读全文