用c语言实现:在{(王一,18986112501),(王二,18986112502),(王三,18986112503),(王四,18986112504)}顺序表中删除第3个位置元素,输出该顺序表中各个元素。
时间: 2024-10-14 08:03:55 浏览: 25
在C语言中,如果你有一个动态数组类型的顺序表,可以按照以下步骤删除指定位置的元素并输出其余元素:
首先,我们需要创建一个结构体来存储姓名和电话号码,然后定义顺序表节点以及相应的函数。这里假设顺序表的结构如下:
```c
typedef struct {
char name[20];
int phone;
} Student;
typedef struct {
Student *data; // 存储数据的指针
int size; // 序列长度
int capacity; // 当前容量
} List;
```
接下来,我们可以编写插入、删除和显示元素的函数:
```c
// 插入函数
void insert(List *list, const char *name, int phone) {
if (list->size == list->capacity) {
list->capacity *= 2; // 如果满了,扩大容量
list->data = realloc(list->data, sizeof(Student) * list->capacity);
}
list->data[list->size] = (Student){.name = name, .phone = phone};
list->size++;
}
// 删除函数
void delete(List *list, int index) {
if (index < 0 || index >= list->size) {
return; // 索引越界,不做处理
}
// 将最后一个元素移到被删除的位置
for (int i = index; i < list->size - 1; i++) {
list->data[i] = list->data[i + 1];
}
// 缩小容量并调整大小
list->data[--list->size] = (Student){NULL, 0}; // 用无效值占位
if (list->size > 0 && list->size * 2 > list->capacity)
list->capacity /= 2;
else
free(list->data); // 若只剩一个元素,释放内存
}
// 显示顺序表元素
void display(List *list) {
for (int i = 0; i < list->size; i++) {
printf("第%d个学生:姓名:%s,电话:%d\n", i+1, list->data[i].name, list->data[i].phone);
}
}
```
现在你可以这样使用这些函数删除并显示顺序表:
```c
List students = {NULL, 0, 4}; // 初始化列表
insert(&students, "王一", 18986112501);
insert(&students, "王二", 18986112502);
insert(&students, "王三", 18986112503); // 要删除的元素
insert(&students, "王四", 18986112504);
delete(&students, 2); // 删除第3个元素(索引从0开始)
display(&students);
```
运行以上代码后,你会看到除第3个位置外的其他学生信息。
阅读全文