【问题描述】定义一张顺序表,表的元素值是由非负整数,构造表时以-1作为输入结束符,且表的元素值是递增的,例如输入序列12 18 23 37 89 -1,顺序表中数据为(12, 18, 23, 37, 89)。编写程序实现如下基本操作: (1) 初始化顺序表; (2) 销毁顺序表; (3) 构造顺序表; (4) 判空; (5) 判满; (6) 输出表中所有元素值; (7) 表中插入一个元素,是的插入元素后,元素的递增顺序不变; 【输入形式】第一行输入顺序表的元素值,以-1作为结束;第二行输入插入元素的值。 【输出形式】第一行输出初始构造表的元素值,以空格分开;第二行输出插入元素后的顺序表元素,以空格分开 【样例输入1】 12 18 23 37 89 -1< 20 【样例输出1】 12 18 23 37 89 12 18 20 23 37 89
时间: 2023-03-29 09:04:03 浏览: 112
以下是我作为 CSDN 开发的 C 知道对于您的问题的回答:
(1) 初始化顺序表:
可以使用结构体来定义顺序表,其中包括表的长度和元素数组。初始化时将长度设为即可。
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void InitList(SqList *L) {
L->length = ;
}
(2) 销毁顺序表:
销毁顺序表时,只需要将表的长度设为即可。
void DestroyList(SqList *L) {
L->length = ;
}
(3) 构造顺序表:
构造顺序表时,可以使用循环读入元素值,直到读入-1为止。读入元素值时,可以判断是否递增,如果不递增则报错。
void CreateList(SqList *L) {
int i, x;
scanf("%d", &x);
for (i = ; x != -1; i++) {
if (i >= MAXSIZE) {
printf("Error: List is full\n");
return;
}
if (i > && x <= L->data[i-1]) {
printf("Error: List is not increasing\n");
return;
}
L->data[i] = x;
L->length++;
scanf("%d", &x);
}
}
(4) 判空:
判空时,只需要判断表的长度是否为即可。
int ListEmpty(SqList L) {
return L.length == ;
}
(5) 判满:
判满时,只需要判断表的长度是否达到最大值即可。
int ListFull(SqList L) {
return L.length == MAXSIZE;
}
(6) 输出表中所有元素值:
输出表中所有元素值时,可以使用循环遍历元素数组,并输出每个元素的值。
void ListTraverse(SqList L) {
int i;
for (i = ; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
(7) 表中插入一个元素,是的插入元素后,元素的递增顺序不变:
表中插入一个元素时,可以从后往前遍历元素数组,找到第一个比插入元素小的元素,然后将插入元素插入到该元素后面。
void ListInsert(SqList *L, int x) {
int i, j;
if (ListFull(*L)) {
printf("Error: List is full\n");
return;
}
for (i = L->length-1; i >= ; i--) {
if (L->data[i] <= x) {
break;
}
}
for (j = L->length-1; j > i; j--) {
L->data[j+1] = L->data[j];
}
L->data[i+1] = x;
L->length++;
}
以上是我对于您的问题的回答,希望能够帮到您。
阅读全文