int main() { STU* head = NULL, * p_new = NULL; int num, i; printf("请输入链表初始个数:\n"); scanf("%d", &num); for (i = 0; i < num; i++) { p_new = (STU*)malloc(sizeof(STU));//申请一个新节点 printf("请输入学号、分数、名字:\n"); //给新节点赋值 scanf("%d %d %s", &p_new->num, &p_new->score, p_new->name); link_creat_head(&head, p_new); //将新节点加入链表 } link_print(STU * head); }
时间: 2023-12-06 19:40:55 浏览: 36
这段代码实现的是链表的创建和输出。其中STU是一个结构体,包含学号、分数、名字三个属性。程序开始先让用户输入链表的初始个数,然后通过循环动态申请新的节点并赋值,最后将新节点加入链表头部。link_creat_head是一个函数,用来将新节点加入链表头部。
最后调用link_print函数输出整个链表。需要注意的是,在代码中调用link_print函数时,需要传入head指针。同时,link_print函数的实现需要自己完成。
相关问题
int main() { STU* head = NULL, * p_new = NULL; int num, i; printf("请输入链表初始个数:\n"); scanf("%d", &num); for (i = 0; i < num; i++) { p_new = (STU*)malloc(sizeof(STU));//申请一个新节点 printf("请输入学号、分数、名字:\n"); //给新节点赋值 scanf("%d %d %s", &p_new->num, &p_new->score, p_new->name); link_creat_head(&head, p_new); //将新节点加入链表 } link_print(STU * head); }上述代码哪里有问题,并改正
上述代码有两个问题:
1. 在调用 link_print 函数时,参数未正确传递。
2. link_creat_head 函数未定义。
以下是修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student {
int num;
int score;
char name[20];
struct student* next;
} STU;
void link_creat_head(STU** head, STU* p_new) {
p_new->next = *head;
*head = p_new;
}
void link_print(STU* head) {
STU* p = head;
while (p != NULL) {
printf("学号:%d,分数:%d,姓名:%s\n", p->num, p->score, p->name);
p = p->next;
}
}
int main() {
STU* head = NULL, * p_new = NULL;
int num, i;
printf("请输入链表初始个数:\n");
scanf("%d", &num);
for (i = 0; i < num; i++) {
p_new = (STU*)malloc(sizeof(STU));//申请一个新节点
printf("请输入学号、分数、名字:\n"); //给新节点赋值
scanf("%d %d %s", &p_new->num, &p_new->score, p_new->name);
link_creat_head(&head, p_new); //将新节点加入链表
}
link_print(head);
return 0;
}
```
#include <stdio.h> #include <stdlib.h> //定义结点结构体 typedef struct student { //数据域 int num; //学号 int score; //分数 char name[20]; //姓名 //指针域 struct student *next; }STU; void link_creat_head(STU **p_head,STU *p_new) { STU *p_mov = *p_head; if(*p_head == NULL) //当第一次加入链表为空时,head执行p_new { *p_head = p_new; p_new->next=NULL; } else //第二次及以后加入链表 { while(p_mov->next!=NULL) { p_mov=p_mov->next; //找到原有链表的最后一个节点 } p_mov->next = p_new; //将新申请的节点加入链表 p_new->next = NULL; } } int main() { STU *head = NULL,*p_new = NULL; int num,i; printf("请输入链表初始个数:\n"); scanf("%d",&num); for(i = 0; i < num;i++) { p_new = (STU*)malloc(sizeof(STU));//申请一个新节点 printf("请输入学号、分数、名字:\n"); //给新节点赋值 scanf("%d %d %s",&p_new->num,&p_new->score,p_new->name); link_creat_head(&head,p_new); //将新节点加入链表 } return 0; }
这段代码实现了一个头插法创建链表的功能。用户输入要创建的节点数,然后依次输入每个节点的数据,再将新节点插入到链表的头部。具体实现过程如下:
1. 定义了一个名为STU的结构体,包含了学号、分数、姓名等数据域,以及一个指向下一个节点的指针域。
2. 定义了一个函数link_creat_head,它有两个参数:一个是头指针的地址,另一个是要插入的新节点的地址。该函数首先判断链表是否为空,如果是,则将头指针指向新节点,并将新节点的指针域设为NULL;如果不为空,则遍历链表找到最后一个节点,将最后一个节点的指针域指向新节点,并将新节点的指针域设为NULL。
3. 在main函数中,先定义了头指针和新节点指针,并将头指针初始化为NULL。然后用户输入要创建的节点数,以及每个节点的数据,将新节点插入到链表的头部。
需要注意的是,在使用完链表后,要释放所有节点的内存空间,避免内存泄漏。