(1)将顺序表的ai元素删除(i为3的倍数)。 (2)判断该顺序表中元素是否对称,对称返回1,否则返回0。 (3)实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 (4)试着将程序改为无指针的顺序表实现。
时间: 2024-01-30 17:02:43 浏览: 68
好的,我会根据您的要求进行回答。
1. 将顺序表的ai元素删除(i为3的倍数)。
假设顺序表为 a,可以使用以下代码实现删除:
```c++
int n = a.size();
for (int i = n - 1; i >= 0; i--) {
if ((i+1) % 3 == 0) {
a.erase(a.begin() + i);
}
}
```
2. 判断该顺序表中元素是否对称,对称返回1,否则返回0。
可以使用以下代码实现:
```c++
int n = a.size();
for (int i = 0; i < n/2; i++) {
if (a[i] != a[n-i-1]) {
return 0;
}
}
return 1;
```
3. 实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
可以使用以下代码实现:
```c++
vector<int> odd, even;
int n = a.size();
for (int i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
even.push_back(a[i]);
} else {
odd.push_back(a[i]);
}
}
a.clear();
for (int i = 0; i < odd.size(); i++) {
a.push_back(odd[i]);
}
for (int i = 0; i < even.size(); i++) {
a.push_back(even[i]);
}
```
4. 将程序改为无指针的顺序表实现。
在无指针的顺序表实现中,我们可以使用一个固定大小的数组来存储元素,并且需要自己实现插入和删除操作。以下是实现代码:
```c++
const int MAXSIZE = 100;
class SeqList {
public:
SeqList() : size(0) {}
void insert(int x, int pos) {
if (size == MAXSIZE) return;
if (pos > size || pos < 0) return;
for (int i = size; i > pos; i--) {
data[i] = data[i-1];
}
data[pos] = x;
size++;
}
void erase(int pos) {
if (pos >= size || pos < 0) return;
for (int i = pos; i < size-1; i++) {
data[i] = data[i+1];
}
size--;
}
int operator[](int pos) const {
if (pos >= size || pos < 0) return -1;
return data[pos];
}
int& operator[](int pos) {
static int t = -1;
if (pos >= size || pos < 0) return t;
return data[pos];
}
int getSize() const {
return size;
}
private:
int data[MAXSIZE];
int size;
};
```
使用无指针的顺序表进行元素删除、判断是否对称和奇偶排序的操作与有指针实现是一致的,只需要将 vector 改为 SeqList 即可。
阅读全文