1、已知顺序表数据类型定义为: #define MAX 100 typedef struct{ int data[MAX]; int last; /*顺序表长度*/ }SeqList; (1)设计一个函数float avgList(SeqList *lp),统计lp指向的顺序表中元素的平均值并返回。 (2)设计一个函数void splitList(SeqList *lp),把lp指向的顺序表中的整数拆分成一个所有奇数在前、所有偶数在后的顺序表。 (3)设计一个函数void deleX(SeqList *lp, int x),在lp指向的顺序表中删除所有值为x的元素。
时间: 2024-02-19 07:00:04 浏览: 92
顺序表相关基本操作(从文件中读取数据)
(1)函数float avgList(SeqList *lp)的实现如下:
float avgList(SeqList *lp) {
float sum = 0;
for (int i = 0; i <= lp->last; i++) {
sum += lp->data[i];
}
return sum / (lp->last + 1);
}
该函数遍历顺序表中的所有元素,求出它们的和,然后除以顺序表的长度得到平均值,最后返回该平均值。
(2)函数void splitList(SeqList *lp)的实现如下:
void splitList(SeqList *lp) {
int i = 0, j = lp->last;
while (i < j) {
while (i < j && lp->data[i] % 2 != 0) {
i++;
}
while (i < j && lp->data[j] % 2 == 0) {
j--;
}
if (i < j) {
int temp = lp->data[i];
lp->data[i] = lp->data[j];
lp->data[j] = temp;
}
}
}
该函数维护两个指针i和j,分别指向顺序表的头和尾。在循环过程中,i指针向右移动,直到指向一个偶数,j指针向左移动,直到指向一个奇数。然后交换i和j指针所指向的元素。重复执行上述过程,直到i和j指针相遇。此时,顺序表中所有奇数都在偶数的前面。
(3)函数void deleX(SeqList *lp, int x)的实现如下:
void deleX(SeqList *lp, int x) {
int k = 0;
for (int i = 0; i <= lp->last; i++) {
if (lp->data[i] != x) {
lp->data[k++] = lp->data[i];
}
}
lp->last = k - 1;
}
该函数遍历顺序表中的所有元素,如果元素的值不等于x,则将该元素复制到顺序表的前面,并将指针k指向下一个位置。最后,将顺序表的长度设为k-1即可。这样,顺序表中所有值为x的元素都被删除了。
阅读全文