菜鸟[1]_链表(C语言)

链表
链表(linked list)是一种很有用的数据存储方式。是线性的。依照我的理解就是很多个点连接起来,其中每个点包括两部分一部分是数据,一部分是指针(指向下一个节点的指针)。如下图:
在这里插入图片描述
在上图中每一个方框所代表的就是一个节点。每个节点中的指针都指向下一个节点的地址。
以上就是链表的概念,那么在C语言中如何创建一个链表呢?
首先我认为在学习链表之前要学会创建指向结构的指针这个操作,下面我们就说一下怎么创建指向结构的指针,并且如何对其中的元素进行操作。

#include<stdio.h>
#include<stdlib.h>
int main(){
	struct Linked_list{
		int number;
		char c;
	};
	struct Linked_list *L; 
	/*
		至此我们就创建了一个指向结构体
		Linked_list的指针,但是这个结
		构体并未分配存储空间。我们接下
		来就要对其分配一个内存空间 
	*/
	L=(struct Linked_list*)malloc(sizeof(struct Linked_list));
	/*
		这里我们就对L这个指针分配了一
		个可以容纳整型和字符型大小的
		内存空间,这个操作在链表中也
		会出现 
	*/ 
	(*L).number=5;
	printf("%d",(*L).number);
	L->number=6;
	printf("%d",(*L).number); 
	/*
		L->number
		(*L).number
		以上两种操作是等价的,都是访问
		这个Linked_list这个结构体中的成
		员	
	*/
	return 0; 
} 
如果大家对结构体不太了解的话可以翻一翻这份专栏中第一个文章。

下面我们进入主题,如何创建一个链表,我们创建链表的时候需要实例化三个结构体指针head、new、end。其中head是这个链表的头指针是链表的开始,我们一般对这个节点不存储数据。end是这个链表结尾。new用来创建一个新的节点。

#include<stdio.h>
#include<stdlib.h>
int main(){
	typedef struct person{
		int number;
		struct person *next;
		//这里实例化了person结构体next是指向这个结构体的指针 
	}Link_list;
	//这里struct person 与Link_list等价 
	Link_list *head=NULL;
	//这里建立链表的头,就是实例化结构体head是一个指针指向这个结构体
	Link_list *new=NULL;
	//这里用来获得新的节点
	Link_list *end=NULL;
	//这个指针是链表的最后一个元素
	
	/*
		以上我们就创建好了一个链表中
		所需要的的三个要素 
	*/
	
	new=(Link_list*)malloc(sizeof(Link_list));
	//在这里我们给new这个指针分配了一块内存,相当于创建了一个新的节点 
	head=new;
	//我们将这个新的节点的地址给了head并且没添加任何元素。 
	end=head; 
	//因为这个链表中只有一个元素因此首和尾是一个节点 
	new=(Link_list*)malloc(sizeof(Link_list));
	new->number=5;
	//我们在第二个节点里面给number赋予了一个值 
	end->next=new;
	//我们将第一个节点中的指针指向了新创建的节点 
	end=new;
	//重新给尾节点赋值 
	end->next=NULL;
	//第二个节点中的指针指向一个NULL意思是空指针 
	
	/*
		以上我们创建了一个两个节点
		的链表,其中第一个节点只有
		指向第二个节点的指针,没有
		保存数据,第二个节点存储了
		一个整型数据,并且有一个指
		向空类型的指针。	
	*/
	 
	
	return 0;
	
} 
在上面我们创建了一个两个节点的链表(一般的链表不会怎么少,这里我们作为例子就创建两个节点)。
最后希望大家在阅读过程中指出我的错误或者对我的内容进行补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值