用c语言建立顺序表从键盘输入整数添加插入和删除元素并打印
时间: 2024-02-16 07:00:15 浏览: 125
c语言实现顺序表的基本操作
5星 · 资源好评率100%
好的,我可以为您解答这个问题。首先,我们需要定义一个顺序表的数据结构,包括表头指针、当前表长和表的最大长度:
```c
#define MAXSIZE 100 // 最大长度
typedef struct {
int data[MAXSIZE]; // 存放元素的数组
int length; // 当前表长
} SqList; // 顺序表类型定义
```
接下来,我们可以实现向表中添加元素的函数 `ListInsert`:
```c
int ListInsert(SqList *L, int i, int e) {
if (i < 1 || i > L->length + 1) { // 判断 i 的合法性
return 0;
}
if (L->length >= MAXSIZE) { // 判断表是否已满
return 0;
}
for (int j = L->length; j >= i; j--) { // 将 i 及其后面的元素后移
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e; // 将元素 e 插入到位置 i
L->length++; // 表长加 1
return 1;
}
```
接着,我们可以实现从表中删除元素的函数 `ListDelete`:
```c
int ListDelete(SqList *L, int i, int *e) {
if (i < 1 || i > L->length) { // 判断 i 的合法性
return 0;
}
*e = L->data[i - 1]; // 将要删除的元素赋值给 e
for (int j = i; j < L->length; j++) { // 将 i 及其后面的元素前移
L->data[j - 1] = L->data[j];
}
L->length--; // 表长减 1
return 1;
}
```
最后,我们可以实现打印表中所有元素的函数 `PrintList`:
```c
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
```
下面是一个完整的程序示例,可以通过键盘输入整数来添加、插入和删除元素,并打印表中所有元素:
```c
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
int ListInsert(SqList *L, int i, int e) {
if (i < 1 || i > L->length + 1) {
return 0;
}
if (L->length >= MAXSIZE) {
return 0;
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->length++;
return 1;
}
int ListDelete(SqList *L, int i, int *e) {
if (i < 1 || i > L->length) {
return 0;
}
*e = L->data[i - 1];
for (int j = i; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
return 1;
}
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SqList L;
L.length = 0;
int op, i, e;
while (1) {
printf("请选择操作:1.添加元素 2.插入元素 3.删除元素 4.打印元素 0.退出\n");
scanf("%d", &op);
switch (op) {
case 1:
printf("请输入要添加的元素:");
scanf("%d", &e);
ListInsert(&L, L.length + 1, e);
break;
case 2:
printf("请输入要插入的位置和元素:");
scanf("%d %d", &i, &e);
ListInsert(&L, i, e);
break;
case 3:
printf("请输入要删除的位置:");
scanf("%d", &i);
ListDelete(&L, i, &e);
printf("删除的元素为:%d\n", e);
break;
case 4:
printf("当前元素为:");
PrintList(L);
break;
case 0:
return 0;
default:
printf("输入错误,请重新输入!\n");
}
}
return 0;
}
```
希望能帮到您!
阅读全文