#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; }
时间: 2024-02-05 17:04:40 浏览: 95
这段代码实现了一个头插法创建链表的功能。用户输入要创建的节点数,然后依次输入每个节点的数据,再将新节点插入到链表的头部。具体实现过程如下:
1. 定义了一个名为STU的结构体,包含了学号、分数、姓名等数据域,以及一个指向下一个节点的指针域。
2. 定义了一个函数link_creat_head,它有两个参数:一个是头指针的地址,另一个是要插入的新节点的地址。该函数首先判断链表是否为空,如果是,则将头指针指向新节点,并将新节点的指针域设为NULL;如果不为空,则遍历链表找到最后一个节点,将最后一个节点的指针域指向新节点,并将新节点的指针域设为NULL。
3. 在main函数中,先定义了头指针和新节点指针,并将头指针初始化为NULL。然后用户输入要创建的节点数,以及每个节点的数据,将新节点插入到链表的头部。
需要注意的是,在使用完链表后,要释放所有节点的内存空间,避免内存泄漏。
相关问题
# include < stdio. h> # include < stdlib. h> typedef int ElemType; typedef struct LNode { ElemType
这是一个C语言程序中的部分代码,涉及到头文件的包含和数据结构的声明。`#include <stdio.h>` 和 `#include <stdlib.h>` 是用来引入标准输入输出库以及标准库函数,如内存管理和I/O操作。
`typedef int ElemType;` 定义了一个新的类型别名 `ElemType`,通常在数据结构中用于元素类型,例如链表中的节点元素。
接着,`typedef struct LNode` 开始定义一个名为 `LNode` 的结构体,这通常是用来表示链表的节点。在链表中,每个节点一般包含两个部分:一个是存储数据的域(`ElemType data;`,这个部分会被 `ElemType` 替换),另一个可能是指向下一个节点的指针(`struct LNode* next;`)。完整的结构体可能会像这样:
```c
typedef int ElemType;
typedef struct LNode {
ElemType data; // 节点的数据域
struct LNode* next; // 指向下一个节点的指针
} LNode;
```
#include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef enum{false=0,true=1}bool; typedef struct node{ ElemType data; struct node *next; }Lnode,*Linklist; //初始化单链表 bool InitList(Lnode*&L); //(头插法)创建单链表 void CreateListListF(Lnode *&L,ElemType a[],int n); //初始化单链表 bool InitList(Lnode *L){ L=(Lnode*)malloc(sizeof(Lnode)); L->next=NULL; if(L==NULL)//内存不足,头结点无法分配到空间 return false; return true; } //(头插法)创建单链表 void CreateListF(Lnode *&L,ElemType a[],int n){ Linklist s; L=(Lnode*)malloc(sizeof(Lnode)); L->next=NULL; int j=0; for(j=0;j<n;j++){ s=(Lnode *)malloc(sizeof(Lnode)); s->data=a[j]; s->next=L->next; L->next=s; } }
这段代码是用C语言实现的单链表的初始化和创建,其中包括了头插法创建单链表的函数。代码中定义了一个结构体node,它包含了一个数据域data和一个指向下一个结点的指针next。代码中还定义了一个typedef枚举类型bool,用来表示true和false。函数InitList用来初始化单链表,函数CreateListF用来通过头插法创建单链表。函数的具体实现如下:
```c
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef enum{false=0,true=1}bool;
typedef struct node{
ElemType data;
struct node *next;
}Lnode,*Linklist;
// 初始化单链表
bool InitList(Lnode*& L){
L=(Lnode*)malloc(sizeof(Lnode));
L->next=NULL;
if(L==NULL) // 内存不足,头结点无法分配到空间
return false;
return true;
}
// 头插法创建单链表
void CreateListF(Lnode*& L, ElemType a[], int n){
Linklist s;
L=(Lnode*)malloc(sizeof(Lnode));
L->next=NULL;
int j=0;
for(j=0;j<n;j++){
s=(Lnode *)malloc(sizeof(Lnode));
s->data=a[j];
s->next=L->next;
L->next=s;
}
}
```
你有什么其他问题吗?
阅读全文