节点:节点被认为是一个实体,有处理能力,比如网络上的一台计算机
而结点则是一个交叉点:打个结,做个标记,在一般算法中应该叫结点
开始结点是指链表第一个结点,没有直接前驱
头指针是指向开始结点的指针(没有头结点的情况下).一个单链表可以由其头指针唯一确定,一般用头指针来命名单链表
头结点是在链表的开始结点之前附加一个结点,有了头结点之后头指针指向头结点.不论链表是否为空,头指针总是非空,而且头结的设置使得对链表的第一个位置的操作与在表中的其他位置操作一致.
定义一个链表:
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 nodehead,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",就是为空的意思。