(1)将顺序表的ai元素删除(i为3的倍数)。 (2)判断该顺序表中元素是否对称,对称返回1,否则返回0。 (3)实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 (4)试着将程序改为无指针的顺序表实现。
时间: 2024-01-30 10:02:43 浏览: 62
顺序表的查找、删除、判断是否对称
好的,我会回答你的问题。
1. 删除顺序表中的ai元素(i为3的倍数):
可以先遍历一遍顺序表,找到所有需要删除的元素的下标,然后从后往前依次删除即可。具体实现如下:
```c++
void deleteAiMultipleOfThree(vector<int>& seq) {
int n = seq.size();
for (int i = n - 1; i >= 0; i--) {
if (seq[i] % 3 == 0) {
seq.erase(seq.begin() + i);
}
}
}
```
2. 判断顺序表中的元素是否对称:
我们可以使用双指针来判断,一个指针从头开始,一个指针从尾开始,依次向中间移动并比较对应元素是否相等。如果所有对应元素都相等,则该顺序表是对称的。具体实现如下:
```c++
bool isSymmetric(vector<int>& seq) {
int left = 0, right = seq.size() - 1;
while (left < right) {
if (seq[left] != seq[right]) {
return false;
}
left++;
right--;
}
return true;
}
```
3. 实现把该表中所有奇数排在偶数之前:
可以使用双指针来实现,一个指针从头开始遍历,一个指针从尾开始遍历。当头指针指向偶数,尾指针指向奇数时,交换两个指针指向的元素。具体实现如下:
```c++
void oddBeforeEven(vector<int>& seq) {
int left = 0, right = seq.size() - 1;
while (left < right) {
while (left < right && seq[left] % 2 == 1) {
left++;
}
while (left < right && seq[right] % 2 == 0) {
right--;
}
if (left < right) {
swap(seq[left], seq[right]);
}
}
}
```
4. 无指针的顺序表实现:
无指针的顺序表可以使用数组来实现,操作方式与指针实现基本一致,只是需要使用下标来访问元素。具体实现如下:
```c++
const int MAXN = 1000;
int seq[MAXN];
int n = 0;
void deleteAiMultipleOfThree() {
int cnt = 0;
for (int i = 0; i < n; i++) {
if (seq[i] % 3 != 0) {
seq[cnt++] = seq[i];
}
}
n = cnt;
}
bool isSymmetric() {
int left = 0, right = n - 1;
while (left < right) {
if (seq[left] != seq[right]) {
return false;
}
left++;
right--;
}
return true;
}
void oddBeforeEven() {
int left = 0, right = n - 1;
while (left < right) {
while (left < right && seq[left] % 2 == 1) {
left++;
}
while (left < right && seq[right] % 2 == 0) {
right--;
}
if (left < right) {
swap(seq[left], seq[right]);
}
}
}
```
阅读全文