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