【线性表】单链表的基本特性

本文主要讲解单链表的基本定义,实现第一个单链表程序。


初识单链表:

  1. 链表是一种链式存取的数据结构,一组地址任意的存储单元存放线性表中的数据元素和下一元素的地址
  2. 链表中的数据是以结点来表示的,每个结点的构成:元素 + 指针(下一元素的存储位置)。元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

定义:

链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的,每个结点只有一个链域的链表称为单链表(Single Linked List)。

单链表特性:

  1. 物理上不连续,逻辑上连续:可以将物理地址上不连续的内存空间连接起来,通过指针来对物理地址进行操作,实现逻辑上的连续(线性)。
  2. 头指针:单链表中每个结点的存储地址存放在其前趋结点的next域中,而开始结点无前趋,故应设头指针head指向开始结点。链表由头指针唯一确定
  3. 尾巴:终端结点无后继,故终端结点的指针域为空,即NULL
  4. 单链表节点定义:
typedef struct node
{
	int data;
	struct node* next;
}Node;

 

两种分类:带头结点的单链表和不带头头结点的单链表

  1. 不带头结点的单链表:也就是 head 只是一个指针,指向链表的第一个节点 。
  2. 带头结点的单链表:头结点的data不保存信息,next指针指向链表的第一个具有data域结点。

第一个单链表程序

#include <stdio.h>
#include <malloc.h>
#include <assert.h>

typedef struct node
{
	int data;
	struct node* next;
}Node; //struct node 完全等于 Node(结构体变量)
typedef Node* LinkList; //struct node * 完全等于 LinkList(结构体指针)

int main()
{
	LinkList head = (LinkList)malloc(sizeof(Node));
	assert(head != NULL);  //检查malloc之后是不是空间不够,返回了空指针NULL(WarningC6011:取消对NULL指针的引用)
	LinkList NodeAa = (LinkList)malloc(sizeof(Node));
	assert(NodeAa != NULL);
	LinkList NodeBb = (LinkList)malloc(sizeof(Node));
	assert(NodeBb != NULL);
	LinkList NodeCc = (LinkList)malloc(sizeof(Node));
	assert(NodeCc != NULL);

	head->data = 101;
	head->next = NodeAa;
	NodeAa->data = 202;
	NodeAa->next = NodeBb;
	NodeBb->data = 303;
	NodeBb->next = NodeCc;
	NodeCc->data = 404;
	NodeCc->next = NULL;

	LinkList p = head; //把链表的头结点交给指针p,去遍历
	while (p != NULL)
	{
		printf("%d  ", p->data);
		p = p->next;
	}
	return 0;
}


 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值