一步一步教你从零开始写C语言链表--->构建一个链表

为什么要学习链表?

链表主要有以下几大特性:

1、解决数组无法存储多种数据类型的问题。

2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。

3、数组移动元素的过程中,要对元素进行大范围的移动,很耗时间,效率也不高。

先来感性的认识一下链表,我们先来认识下简单的链表:

从这幅图我们得出以下信息:

这个简单链表的构成:

头指针(Header),若干个节点(节点包括了数据域和指针域),最后一个节点要指向空。

实现原理:头指针指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表。

接下来看看链表的数据结构:

struct  list_node
{
	int data ; //数据域,用于存储数据
	struct list_node *next ; //指针,可以用来访问节点数据,也可以遍历,指向下一个节点
};

那么如何来创建一个链表的一个节点呢?
我们写个程序演示一下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct  list_node
{
	int data ;
	struct list_node *next ;
};

typedef struct list_node list_single ; 	

int main(void)
{
	list_single *node = NULL ;          //1、首先,当然是定义一个头指针
	node = malloc(sizeof(list_single)); //2、然后分配内存空间
	if(node == NULL){
		printf("malloc fair!\n");
	}
	memset(node,0,sizeof(list_single)); //3、清一下
	node->data = 100 ;		    //4、给链表节点的数据赋值
	node->next = NULL ;                 //5、将链表的指针域指向空
	printf("%d\n",node->data);
	return 0 ;
}

那么,这仅仅只是创建一个链表中的一个节点,为了好看,我们把创建节点封装成函数,以后想创建多少个节点,我们就可以反复调用一个函数来创建,会很方便:

list_single *create_list_node(int data)
{
	list_single *node = NULL ;
	node = malloc(sizeof(list_single));
	if(node == NULL){
		printf("malloc fair!\n");
	}
	memset(node,0,sizeof(list_single));
	node->data = 100 ;
	node->next = NULL ;
}

接下来在程序上完成的程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct  list_node
{
	int data ;
	struct list_node *next ;
};

typedef struct list_node list_single ;
list_single *create_list_node(int data)
{
	list_single *node = NULL ;
	node = malloc(sizeof(list_single));
	if(node == NULL){
		printf("malloc fair!\n");
	}
	memset(node,0,sizeof(list_single));
	node->data = 100 ;
	node->next = NULL ;
}
int main(void)
{
	int data = 100 ;
	list_single *node_ptr = create_list_node(data); //创建一个节点
	printf("node_ptr->data=%d\n",node_ptr->data);   //打印节点里的数据
	printf("node_ptr->next=%d\n",node_ptr->next);
	return 0 ;
}

执行结果 :

这样我们就完成一个链表节点的创建了,那么它现在的样子如下图:

链表的结构里,数据存储了100,因为这个链表只有一个节点,所以它的指针域指向了NULL。

时间: 2025-01-21 07:32:09

一步一步教你从零开始写C语言链表---&gt;构建一个链表的相关文章

如何在Default.aspx中写HTML语言啊?

问题描述 Default.aspx中,将开头的内容<%@%>保留,剩余的内容全删了,然后写HTML语言,结果出现一个警告,如下图所示.我发现将头部的MasterPageFile="~/Site.master"删除就没有警告了.问题是:MasterPageFile="~/Site.master"是不是很重要啊不能随便删除吧? 解决方案 解决方案二:一会功夫你都发送这么多帖子了..随便找个初级的教程看看啊....解决方案三:引用1楼diaodiaop的回复:

一步一步教你加密解密技术——压缩与脱壳(1)(1)

压缩与脱壳第一节 PE文件格式PE教程1: PE文件格式一览PE 的意思就是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行体文件格式.它的一些特性继承自 Unix的 Coff (common object file format)文件格式."portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的 : 即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格

一步一步详细地教你如何正确地提交ALEXA

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 谨以此篇献给千千万万的还没有向ALEXA提交任何介绍信息的站长.我刚接触站长这个职业,我的小站也是前天才上线,希望大家多支持. 目前ALEXA排名是比较热门的话题,大大小小的站长都对这个东西很关注,我也不例外,每天都会去查一下网站的排名变化, 不过在查ALEXA排名时,我经常去chinaz的站长工具那里查询,一是因为速度快,二呢,感觉他那里查

一步一步教你加密解密技术——函数、资源与注册表(1)

第4章 函数.资源与注册表第一节 Win32 API 函数1.限制程序功能函数1.EnableMenuItem允许.禁止或变灰指定的菜单条目2.EnableWindow允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰) 2.对话框函数CreateDialog从资源模板建立一非模态对话窗CreateDialogParam 从资源模板建立一非模态对话窗CreateDialogIndirect 从内存模板建立一非模态对话窗CreateDialogIndirectParam从内存模板建立一非模态对

一步一步教你网站同步镜像(转载)_Mysql

1.介绍 现在的网站随着访问量的增加,单一服务器无法承担巨大的访问量,有没有什么方便快捷的方式解决这个问题呢,答案是"有"!比如建立服务器群,进行均衡负载. 但是如果要解决像电信网通这样的互访问题(中国网民的悲哀..),这个解决办法就无能为了了! 要解决这个问题最方便快捷的方式就是建立镜像网站!由访问者自己选择适合自己网络的速度最快的网站!这样即可以解决线路问题,又可以解决访问量问题! 2.网站同步的数据分类 网站数据基本分为两类: 一类是文件,比如HTML,ASP,PHP等网页文件,

一步一步教你加密解密技术——注册机和补丁制作(1)

注册机和补丁制作第一节 概念介绍 何为注册机?注册机就是针对某一软件,通过一定算法算出注册码的程序.我们写注册机时,一般都要了解注册码的算法(这当然是通过跟踪调试了解的),之后用汇编语言或其它 高级语言来把算法还原.这样大家可根据自己的要求输入注册码,如根据自己的姓名,公司的名称注册. 目前 共享软件有两种注册方式: 一 种是交费后,作者给寄有全部功能的 Register软件,原来的Shareware根本没有某些功能: 第二种交费后, 作者给你个注册码(RegisterNumber),注册后功能

一步一步教你加密解密技术——压缩与脱壳(4)(1)

第五节 脱壳高级篇1. 认识Import表著者: [yAtEs] [Jamesluton@hotmail.com] 译者:hying[CCG] 标题:PE输入表说明有很多介绍PE文件的文章, 但是我打算写一篇关于输入表的文章,因为它对于破解很有用. 我想解释它的 最好的方法是举一个例子,你可以跟着我逐步 深入,一步一步的思考,最后你将完全 明白,我选择了一个我刚下载下来的小程序,它是用TASM编译的,有一个比较小的输入表,所以我想它应该是个不错的范例. 好了,让我们开始吧. 首先我们得找到输入表

一步一步教你加密解密技术——压缩与脱壳(2)(1)

第二节 认识脱壳作为一个以"壳"为主的站台,如果连访者连什么是"壳"都不清楚的话,那我也太失败了.很早以前就想写编完全关于"壳"的文章,但苦于时间和文字水平的关系,都没提笔. 首先我想大家应该先 明白"壳"的概念.在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等.同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序.它们一般都是先于程序运行,拿到控制权,然后完成它

一步一步教你加密解密技术——软件保护技术(2)(1)

第二节 反跟踪技术1.Anti-Debug1.MeltICE子类型类型:检测SoftICE.TRW2000平台:Windows9x.Windows NT原理:用CreateFileA( )或_lopen( )函数试图获得SoftICE的驱动程序"\\.\SICE"(Windows9X版本)."\\.\SIWDEBUG"."\\.\NTICE"(Windows NT版本)."\\.\SIWVID"等的句柄,如果成功则说明Soft