【问题描述】定义一张顺序表,表的元素值是由非负整数,构造表时以-1作为输入结束符,例如输入序列12 18 23 37 89 -1,顺序表中数据为(12, 18, 23, 37, 89)。编写程序实现如下基本操作: (1) 初始化顺序表; (2) 销毁顺序表; (3) 构造顺序表; (4) 判空; (5) 判满; (6) 输出表中所有元素值; (7) 表中删除一个元素; 【输入形式】第一行输入顺序表的元素值,以-1作为结束;第二行输入删除元素的位置。 【输出形式】第一行输出初始构造表的元素值,以空格分开;第二行根据删除是否成功输出结果,如果删除成功,则输出删除元素后的表元素值,以空格分开,否则输出DELETE FAILED 【样例输入1】 12 18 23 37 89 -1 3 【样例输出1】 12 18 23 37 89 12 18 37 89 【样例说明1】输入序列是12 18 23 37 89 -1,除-1以外只有5个元素值12 18 23 37 89,所以构造的线性表是(12, 18, 23, 37, 89)。删除第3个元素后的线性表是(12, 18, 37, 89)。
时间: 2023-03-29 18:04:01 浏览: 94
我可以回答这个问题。以下是程序的实现:
#include <stdio.h>
#include <stdlib.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) {
int i;
for (i = ; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
// 表中删除一个元素
int DeleteList(SqList *L, int pos) {
int i;
if (pos < 1 || pos > L->length) {
return ;
}
for (i = pos - 1; i < L->length - 1; i++) {
L->data[i] = L->data[i + 1];
}
L->length--;
return 1;
}
int main() {
SqList L;
int pos, success;
InitList(&L);
CreateList(&L);
PrintList(L);
scanf("%d", &pos);
success = DeleteList(&L, pos);
if (success) {
PrintList(L);
} else {
printf("DELETE FAILED\n");
}
DestroyList(&L);
return ;
}
阅读全文