定义一张顺序表,表的元素值是由非负整数,构造表时以-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 使用c语言编译
时间: 2023-04-04 18:03:33 浏览: 221
以下是C知道的回答:
(1) 初始化顺序表:
```c
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存储顺序表元素的数组
int length; // 顺序表的当前长度
} SqList;
void InitList(SqList *L) {
L->length = 0; // 初始化顺序表长度为0
}
```
(2) 销毁顺序表:
```c
void DestroyList(SqList *L) {
L->length = 0; // 将顺序表长度置为0即可
}
```
(3) 构造顺序表:
```c
void CreateList(SqList *L) {
int x;
scanf("%d", &x);
while (x != -1 && L->length < MAXSIZE) { // 当输入-1或顺序表已满时停止输入
L->data[L->length++] = x; // 将输入的元素添加到顺序表中
scanf("%d", &x);
}
}
```
(4) 判空:
```c
int ListEmpty(SqList L) {
return L.length == 0; // 如果顺序表长度为0,则为空
}
```
(5) 判满:
```c
int ListFull(SqList L) {
return L.length == MAXSIZE; // 如果顺序表长度达到最大值,则为满
}
```
(6) 输出表中所有元素值:
```c
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]); // 依次输出顺序表中的元素
}
printf("\n");
}
```
(7) 表中插入一个元素,是的插入元素后,元素的递增顺序不变:
```c
void InsertList(SqList *L, int x) {
if (ListFull(*L)) { // 如果顺序表已满,则无法插入
printf("List is full!\n");
return;
}
int i;
for (i = L->length - 1; i >= 0 && L->data[i] > x; i--) {
L->data[i + 1] = L->data[i]; // 将大于插入元素的元素后移
}
L->data[i + 1] = x; // 将插入元素插入到正确的位置
L->length++; // 顺序表长度加1
}
```
以上是C知道对于顺序表的基本操作的回答,希望能对您有所帮助。
阅读全文