简单的单项链表的创建过程以及注意点(由主函数进入):
#include <stdio.h>
#include <stdlib.h>
struct node //定义一个结构体类型,里面有值域和指针域。单项链表中指针域只保存了下一个结
点的地址
{
int num;
struct node *next;
};
typedef struct node Node; //将struct node 和struct node * 重命名
typedef struct node * Link;
void create_link(Link *head) //简单的链表创建函数,定义了二级指针的形参(保存实参(指针)的地址),只有将实参放在指针中才将改变后的结果带回
{
*head = NULL;
}
void insert_node_head(Link * head,Link new_node) //头插法,将新的结点放在原来的第一个结点的前面,定义一个二级指针,保存第一个结点的地址,和一个指针,保存新的结点的地址
{
new_node->next = *head; //将原来的第一个结点的地址作为新的第一个结点中的指针域中指向的地址
*head = new_node; //将新的第一个结点的地址给头指针
}
void display_link(Link head) //输出函数,通过成员运算符->将每一个结点的值域的成员输出
{
Link p;
p = head;
while(p != NULL)
{
printf("num = %d\n",p->num);
p = p->next;
}
}
int main()
{
Link head = NULL; //定义一个struct node型指针,同时是链表的头指针,用来存放链表的地址, 不轻易更改,用头插法创建链表示需要改变
create_link(&head); //创建链表的函数
Link new_node = NULL; //建立一个新的struct node型指针,用来存放新的节点的地址
int i = 0; //循环变量,用来给结点分配空间
for(i = 0; i < 10;i++)
{
new_node = (Link)malloc(sizeof(Node));
if(new_node == NULL)
{
printf("malloc error!\n");
exit(-1);
}
new_node->num = i + 1; //给结点中的成员赋值
insert_node_head(&head,new_node); //结点插入函数(头插)
}
display_link(head); //输出函数
return 0;
}
1,结构体的成员运算符有两种,'.'和'->' 。普通变量访问时用'.',指针变量访问是用->
2,在建立一个新的结构体类型时,{}后面的分号;不能丢
3,链表创建函数和结点插入函数,都需要对头指针操作,其实是对头指针的值即地址进行操作,要想将操作后的结果带回,必须用二级指针作为形参
这篇博客详细介绍了如何创建和操作简单的单向链表,包括头结点的初始化、头插法插入新节点以及链表的显示。在创建链表时,使用二级指针传递头结点的地址以确保更新后的链表头被正确保存。文章还强调了结构体成员运算符的使用规则以及在定义结构体时分号的重要性。
322

被折叠的 条评论
为什么被折叠?



