STU **p_head,STU *p_new
时间: 2023-12-04 11:03:14 浏览: 47
根据提供的引用内容,可以看出STU是一个结构体类型,p_head和p_new都是该结构体类型的指针变量。其中p_head指向链表的头节点,p_new则是新创建的节点。在链表中,我们可以通过p_head指针找到整个链表的头部,然后通过遍历链表来访问每个节点。p_new则是在链表中新创建的节点,可以通过指针操作将其插入到链表中。具体的操作可以参考提供的引用内容中的实例代码。
相关问题
STU **p_head
STU **p_head是一个指向指针的指针,通常用于链表操作中。在引用中,p_head指向链表头指针的地址,通过*p_head可以访问链表头指针,而通过**p_head可以访问链表头指针所指向的节点。在链表操作中,使用STU **p_head可以方便地对链表进行插入、删除等操作。
举个例子,如果要在链表头插入一个新节点,可以使用如下代码:
```c
void insert_node(STU **p_head, STU *new_node) {
new_node->next = *p_head;
*p_head = new_node;
}
```
其中,p_head指向链表头指针的地址,new_node是要插入的新节点。通过new_node->next = *p_head可以将新节点的next指针指向原来的链表头节点,然后通过*p_head = new_node将链表头指针指向新节点,完成插入操作。
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;
}
```