【问题描述】定义一张顺序表(表的长度不超过100),表的元素值是由非负整数,构造表时以-1作为输入结束符,例如输入序列12 18 23 37 89 -1,顺序表中数据为(12, 18, 23, 37, 89)。编写程序实现如下基本操作: (1) 初始化顺序表; (2) 销毁顺序表 (3) 构造顺序表; (4) 判空; (5) 判满; (6) 输出表中所有元素值; (7) 表中插入一个元素; 【输入形式】第一行输入顺序表的元素值,以-1作为结束;第二行输入插入的位置和元素值 【输出形式】第一行输出初始构造表的元素值,以空格分开;第二行根据插入是否成功输出结果,如果插入成功,则输出插入元素后的表元素值,以空格分开,否则输出INSERT FAILED 【样例输入1】 12 18 23 37 89 -1 3 20 【样例输出1】 12 18 23 37 89 12 18 20 23 37 89
时间: 2023-03-29 11:04:00 浏览: 85
我可以回答这个问题。以下是程序实现:
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->length = ;
}
// 销毁顺序表
void DestroyList(SqList *L) {
L->length = ;
}
// 构造顺序表
void CreateList(SqList *L) {
int num;
scanf("%d", &num);
while (num != -1 && L->length < MAXSIZE) {
L->data[L->length++] = num;
scanf("%d", &num);
}
}
// 判空
int ListEmpty(SqList L) {
return L.length == ;
}
// 判满
int ListFull(SqList L) {
return L.length == MAXSIZE;
}
// 输出表中所有元素值
void PrintList(SqList L) {
for (int i = ; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
// 表中插入一个元素
int ListInsert(SqList *L, int pos, int elem) {
if (pos < 1 || pos > L->length + 1 || L->length == MAXSIZE) {
return ;
}
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i - 1];
}
L->data[pos - 1] = elem;
L->length++;
return 1;
}
int main() {
SqList L;
InitList(&L);
CreateList(&L);
PrintList(L);
int pos, elem;
scanf("%d %d", &pos, &elem);
if (ListInsert(&L, pos, elem)) {
PrintList(L);
} else {
printf("INSERT FAILED\n");
}
return ;
}
输入样例:
12 18 23 37 89 -1
3 20
输出样例:
12 18 23 37 89
12 18 20 23 37 89
阅读全文