程序流程: 定义Employee类,包含员工姓名、基本工资和下一个结点的指针。 定义create_list函数,用于创建链表,通过输入员工姓名和基本工资来构造Employee对象,并将其添加到链表中。当输入姓名为空字符串或基本工资为0时,停止输入并返回头结点。 定义del_list函数,用于删除链表中等于给定基本工资的所有结点。首先判断头结点是否等于给定基本工资,如果是,则将头结点指向下一个结点;然后遍历链表中的每个结点,如果其下一个结点的基本工资等于给定基本工资,则将其下一个结点删除;最后返回头结点。 定义print_list函数,用于输出链表中每个结点的姓名和基本工资。 在主函数中调用create_list函数创建链表,然后输入要删除的基本工资,并调用del_list函数删除链表中等于给定基本工资的所有结点,最后调用print_list函数输出删除后的链表信息用C语言写
时间: 2023-05-28 13:04:10 浏览: 129
,程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义Employee类
typedef struct Employee {
char name[20]; // 姓名
float salary; // 基本工资
struct Employee *next; // 下一个结点的指针
} Employee;
// 创建链表函数
Employee *create_list() {
Employee *head = NULL; // 头结点指针
Employee *tail = NULL; // 尾结点指针
char name[20];
float salary;
// 输入员工姓名和基本工资,构造Employee对象,并将其添加到链表中
printf("Input name and salary of employee (stop with empty name or salary 0):\n");
while (1) {
scanf("%s%f", name, &salary);
if (strcmp(name, "") == 0 || salary == 0) {
break;
}
Employee *p = (Employee *)malloc(sizeof(Employee));
strcpy(p->name, name);
p->salary = salary;
p->next = NULL;
if (head == NULL) {
head = p;
} else {
tail->next = p;
}
tail = p;
}
return head;
}
// 删除链表函数
Employee *del_list(Employee *head, float salary) {
// 如果头结点的基本工资等于给定基本工资,则将头结点指向下一个结点
while (head != NULL && head->salary == salary) {
Employee *p = head;
head = head->next;
free(p);
}
// 遍历链表中的每个结点,如果其下一个结点的基本工资等于给定基本工资,则将其下一个结点删除
Employee *p = head;
while (p != NULL && p->next != NULL) {
if (p->next->salary == salary) {
Employee *q = p->next;
p->next = q->next;
free(q);
} else {
p = p->next;
}
}
return head;
}
// 输出链表函数
void print_list(Employee *head) {
printf("Name\tSalary\n");
while (head != NULL) {
printf("%s\t%.2f\n", head->name, head->salary);
head = head->next;
}
}
// 主函数
int main() {
// 创建链表
Employee *head = create_list();
// 输入要删除的基本工资
float salary;
printf("Input salary to delete:\n");
scanf("%f", &salary);
// 删除链表中等于给定基本工资的所有结点
head = del_list(head, salary);
// 输出删除后的链表信息
print_list(head);
return 0;
}
阅读全文