编写一个程序实现如下功能:建立一个单链表,每个结点数据要有职工号、工资。用一个creat函数来建立链表,用list函数输出数据(数据自定)
时间: 2023-05-04 07:00:40 浏览: 188
可以使用 Python 编写一个程序来实现。步骤如下:
1. 建立一个单链表的类,每一个节点存储一个数据(即工号、工资等信息)和指向下一个节点的指针。
2. 使用类里的方法来添加节点,每次添加都要判断链表里是否已经有这个工号,如果有则更新工资,如果没有则新建一个节点。
3. 使用类里的方法来遍历链表,将每个节点的数据依次输出。
这样就能建立一个单链表,实现输入和输出数据的功能。
相关问题
编写程序 c12-3.c,实现单链表的相关操作。 假设有如下定义的单链表结点: struct List { int num; char name[20]; struct List *next; }; 编程实现如下功能: ① 创建单链表,函数原型为: struct List * H_creat_list(); 函数返回单链表的头结点地址。 ② 输出单链表,函数原型为: void print(struct List *head); 其中,head 为单链表的头指针。 ③ 在一个单链表中指定的位置 k 插入一个结点,函数原型为: struct List *insert_Node_k(struct List *head, int num ,char name[],int k); 其中,head 为单链表的头指针,num 和 name[]为待插入的学号和姓名,函数返回插入后的 单链表的头结点的指针。 ④ 删除单链表中学号为 x 的结点 struct List *Del_Node_x(struct List *head,int x); 其中,head 为单链表的头指针,函数返回删除后的单链表的头结点的指针
以下是实现单链表相关操作的 C 程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct List {
int num;
char name[20];
struct List *next;
};
// 创建单链表,返回单链表的头结点地址
struct List *H_creat_list() {
struct List *head = NULL;
struct List *p = NULL;
int num;
char name[20];
printf("请输入学号(输入 -1 结束):");
scanf("%d", &num);
while (num != -1) {
// 创建新结点
struct List *new_node = (struct List *)malloc(sizeof(struct List));
new_node->num = num;
printf("请输入姓名:");
scanf("%s", new_node->name);
new_node->next = NULL;
// 将新结点插入到链表中
if (head == NULL) {
head = new_node;
p = new_node;
} else {
p->next = new_node;
p = new_node;
}
printf("请输入学号(输入 -1 结束):");
scanf("%d", &num);
}
return head;
}
// 输出单链表
void print(struct List *head) {
if (head == NULL) {
printf("链表为空!\n");
return;
}
struct List *p = head;
while (p != NULL) {
printf("学号:%d 姓名:%s\n", p->num, p->name);
p = p->next;
}
}
// 在单链表的第 k 个位置插入结点
struct List *insert_Node_k(struct List *head, int num ,char name[],int k) {
if (k < 1) {
printf("插入位置非法!\n");
return head;
}
// 创建新结点
struct List *new_node = (struct List *)malloc(sizeof(struct List));
new_node->num = num;
strcpy(new_node->name, name);
new_node->next = NULL;
假设有如下定义的单链表结点: struct List { int num; char name[20]; struct List *next; }; 编程实现如下功能: ① 创建单链表,函数原型为: struct List * H_creat_list(); 函数返回单链表的头结点地址。 ② 输出单链表,函数原型为: void print(struct List *head); 其中,head 为单链表的头指针。 ③ 在一个单链表中指定的位置 k 插入一个结点,函数原型为: struct List *insert_Node_k(struct List *head, int num ,char name[],int k); 其中,head 为单链表的头指针,num 和 name[]为待插入的学号和姓名,函数返回插入后的 单链表的头结点的指针。 ④ 删除单链表中学号为 x 的结点 struct List *Del_Node_x(struct List *head,int x); 其中,head 为单链表的头指针,函数返回删除后的单链表的头结点的指针
① 创建单链表,函数原型为: struct List * H_creat_list();
实现方法如下:
```
struct List * H_creat_list()
{
// 分配内存空间,用于存储新的结点
struct List *new_node = (struct List *)malloc(sizeof(struct List));
// 判断是否分配成功
if (new_node == NULL)
{
printf("内存分配失败!\n");
exit(1);
}
// 输入结点信息
printf("输入学号:");
scanf("%d", &new_node->num);
printf("输入姓名:");
scanf("%s", new_node->name);
// 新结点的 next 指针指向 NULL
new_node->next = NULL;
// 返回新结点的地址
return new_node;
}
```
② 输出单链表,函数原型为: void print(struct List *head);
实现方法如下:
```
void print(struct List *head)
{
// 定义指针变量 p,用于遍历单链表
struct List *p = head;
// 遍历单链表,输出结点信息
while (p != NULL)
{
printf("学号:%d,姓名:%s\n", p->num, p->name);
p = p->next;
}
}
```
③ 在一个单链表中指定的位置 k 插入一个结点,函数原型为: struct List *insert_Node_k(struct List *head, int num ,char name[],int k);
实现方法如下:
```
struct List *insert_Node_k(struct List *head, int num ,char name[],int k)
{
// 定义指针变量 p,用于遍历单链表
struct List *p = head;
// 分
阅读全文