数据结构创建单链表(c语言)

这篇博客详细记录了使用C语言创建单链表的过程,涵盖了头结点和头指针的概念,并提供了代码和注释帮助理解。博主强调头指针始终指向链表的第一个结点,而头结点则可有可无,可以包含链表长度等信息。
摘要由CSDN通过智能技术生成

记录一下复习c语言建立单链表的过程,加了一些注释便于理解。

首先了解一下关于单链表的各种概念:

1.头结点:在开始结点之前的结点(可有可无),其值域不包含任何信息,也可以包含链表长度等信息。
2.头指针:永远指向链表中第一个结点的位置,如果链表有头结点,头指针指向头结点;否则,头指针指向开始结点,即第一个节点。
3.带有头节点单链表头指针head指向头结点。头指针head始终不等于NULL,head->next等于NULL的时候链表为空。
4.不带头结点的单链表头指针head指向开始结点,当head等于NULL时链表为空。
5.头结点和头指针的区别:头指针是一个指针,头指针指向链表的第一个结点(如果链表有头结点,头指针指向头结点;否则,头指针指向开始结点);头结点是一个实际存在的点,它包含有数据域和指针域。头指针什么时候都应该存在,而头节点可有可无。

下面是具体代码和个人的理解注释:

#include<stdio.h>
#include<stdlib.h>


typedef struct node {
           //单链表的结构定义 
	int data;               //定义int类型的数据域 
	struct node *next;       //定义指针域 
}node,*Linklist;

//1.
//typedef:为类型添加别名,增加代码扩展性,这里将 struct node  起别名为:node 和Linklist
//2.最后的  node, *Linklist,上面代码可以分解为:
//typedef struct LNode LNode; //将结构体类型struct LNode重命名为node    ,强调节点
//typedef struct LNode LinkList; //将struct node *  重命名为LinkList,类似于int p;定义一个int类型的指针。强调指针
//两者等价


//初始化单链表 并设置为空表
node *initlist(node *l) {
   
	l = (node *)malloc(sizeof(node));
	l->next = NULL;//使头结点的指针域为空,建立一个空的单链表 
	return l;
}

//利用头插法建立单链表  (对头结点后插操作),逆向创建单链表
void creatfromhead(node *l) {
   
	node *p;                               //新建一个结点指针 ,永远指向当前链表的头结点
	int i;
	scanf_s("%d", &i);                     //输入i,用于指代输入的整数,将要放进链表的数据元素,也用来控制while循环,当我输入i的值为-1时结束。
	while (i != -1) {
    
			p = (node *)malloc(sizeof(node));//新建一个结点
			p->data = i;                     //把输入的值赋值给新结点的指针域
			p->next = l->next;               //把新结点插入到表头 
			l->next = p;                     //头结点要始终放在最前面 
			scanf_s("%d", &i)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值