数据结构之链表---易混淆概念

节点:节点被认为是一个实体,有处理能力,比如网络上的一台计算机
而结点则是一个交叉点:打个结,做个标记,在一般算法中应该叫结点

开始结点是指链表第一个结点,没有直接前驱
头指针是指向开始结点的指针(没有头结点的情况下).一个单链表可以由其头指针唯一确定,一般用头指针来命名单链表
头结点是在链表的开始结点之前附加一个结点,有了头结点之后头指针指向头结点.不论链表是否为空,头指针总是非空,而且头结的设置使得对链表的第一个位置的操作与在表中的其他位置操作一致.

定义一个链表:
struct node{
int data;
struct node *next;
};
data为数据域,用于存储数据;
*next为指针域
(链表是结点的集合,0个或多个结点组成一个链表,
结点的结构:数据域(记录数据),指针域(指向下一个结点)
链表的结构;1.若干节点依次相连
2.有头指针,指向链表中的第一个结点,初始情况下头指针为NULL;
3.有头节点。头接点是只有指针域的特殊结点,指针域存放第一个结点的指针。初始化情况下链表只有头结点,头结点的指针域存放指向NULL的指针
4.有头结点和尾结点,初始化情况下链表只有头结点和尾结点,尾结点指向NULL。
类型4有点像栈的结构,头结点为base,尾结点为top。

单链表定义:当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。
struct Node
{
ElemType data;
struct Node*next;
};
typedef struct Node LNode;
typedef struct Node *LinkedList;

struct node first;
struct node *head = &first;

这个head指针就是头指针。
这个头指针的意义在于,在访问链表时,总要知道链表存储在什么位置(从何处开始访问),由于链表的特性(next指针),知道了头指针,那么整个链表的元素都应该能够被访问,也就是说头指针是必须存在的。

头指针:*指向链表第一个结点的指针,具有标识作用,贯以链表的名称,无论链表是否为空,头指针均不为空,是链表的必要元素
头结点是为了操作的统一和方便确立的,其数据域一般无意义,首元结点就是第一个元素的结点,它是头结点后的第一个结点。

头结点不是链表所必需的。

没有头结点的程序
#include<stdio.h>
struct node{
int data;
struct nodenext;
};
int main(void)
{
struct node
head,first,second;
head = &first;
first.data = 1;
first.next = &second;

second,data = 2;
second.next = NULL;
while(head){
printf("%d\n",head->data);
head=head->next;
}
return 0;
}

=和==区分:
赋值和比较的区别

node *p=NULL定义了一个node类型的结构体指针,并初始化为空,避免野指针的出现,其实NULL就是字符串“\0",就是为空的意思。

头结点,首元结点,头指针,第一个元素的区别:
头结点是指向第一个元素的节点,此节点没有数据,不携带任何信息,
首元结点是链表中的第一个节点,可能是头结点,也可能是第一个元素,头指针是指向首元结点的指针,只是一个指针,第一个元素是指链表中第一个存放数据的节点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值