数据结构_链表_单向链表

链表(Linked List)是由一连串的结构(称为结点)组成的,其中每个结点都包含指向链中下一个结点的指针。

链表中的最后一个结点包含一个空指针。

链表与数组不同,数组的线性序是由数组的下标决定的,而链表中的顺序是由各结点的指针域所决定的。

链表可以灵活地表示动态集合。 采用链表表示线性表,无论向表中插入或删除元素,都不需要移动数据。

与顺序表示法不同,链表的结点不再是连续且等距离地存放在一块存储区域,相反,结点可以存放在存储区的任何位置。

单向链表中的结点至少有一个指针域。 其中结点的个数可以是0或多个,当结点个数为0时,称为空链表。如果链表不为空,则第一个结点指向第2个, 第2个结点指向第3个,,,,,构成线性表。链中最后一个结点的指针域为0(表示NULL指针)。

声明结点类型。为了建立链表,首先需要一个表示链表中单个结点的结构、

//结点结构描述
struct node{
	int value;
	node *next;		//指向下一个结点的指针 
}; 

我们需要记录链表开始的位置,即需要有一个始终指向链表中第一个结点的变量,我们把此变量命名为first:      node * first = NULL;

first = NULL, 表示不指向任何存储区域,即这个链表为空。

//判断链表为空的函数
bool is_empty(node *first)
{
	return !first;
} 
在构建链表时,需要逐个创建结点,并且把生成的每个结点加入到链表中。创建结点包括三个步骤:

1、为结点分配内存单元;

2、把数据存储到结点中;

3、把结点插入到链表中。

为了创建结点,需要一个变量临时指向该结点,假设此变量为new_node: node *new_node = new node();

//在堆内存中分配一个能够存放该结构的内存区域,并返回获得的内存区域的首地址,赋给new_node指针。

//例如
new_node->value = 25;
new_node->next = NULL; 

在链表的开始出插入结点。如果new_node指向要插入的结点,first指向链表的首结点。为了把该结点插入链表的首部,需要两条语句。

首先,修改该结点的成员next,使其指向先前在链表开始处的结点: new_node->next = first;

然后,使first指向新结点:  first = new_node;

在链表的首部插入结点的函数add_to_list,有两个形式参数: list(指向链表中首结点的指针),n(需要存储在新结点中的整数)。

node *add_to_list(node *list, int n)
{
	node *temp = new node ;
	temp->value = n;
	temp->next = list;
	return temp;
}
//例如:first = add_to_list(first,20);


你可能感兴趣的:(数据结构,链表)