C++
链表基本操作
我们知道,数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组?/p>
位置和距离都是固定的
链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存?/p>
数据元素。链表中每一个元素成?/p>
?/p>
结点
?/p>
,每一个结点都是由数据域和指针域组成的,每个结点中的指?/p>
域指向下一个结?/p>
?/p>
Head
?/p>
?/p>
头指?/p>
?/p>
,表示链表的开始,用来指向第一个结点,而最后一个指针的指针
域为
NULL(
空地址
)
,表示链表的结束?/p>
可以看出链表结构必须利用指针才能实现,即一个结点中必须?/p>
含一个指针变量,用来存放下一个结点的地址。实际上,链表中的每个结点可以用若干个数据和若干个指
针。结点中只有一个指针的链表称为单链表,这是最简单的链表结构?/p>
struct Node
{
int Data;
Node*next;
};
这里用到了结构体类型?/p>
其中?/p>
*next
是指针域?/p>
用来指向该结点的下一个结点;
Data
是一个整形变量,
用来存放结点中的数据。当然,
Data
可以是任何数据类型,包括结构体类型或类类型?/p>
在此基础上,我们在定义一个链表类
list
,其中包含链表结点的插入,删除,输出等功能的成员函数?/p>
class list
{
Node*head;
public:
list(){head=NULL;}
void insertlist(int aDate,int bDate);//
链表结点的插?/p>
void Deletelist(int aDate);//
链表结点的删?/p>
void Outputlist();//
链表结点的输?/p>
Node*Gethead(){return head;}
};
2
?/p>
链表结点的访?/p>
由于链表中的各个结点是由指针链接在一起的,其存储单元文笔是连续的,因此,对其中任意结点的地址
无法向数组一样,用一个简单的公式计算出来,进行随机访问。只能从链表的头指针(即
head
)开始,
用一个指?/p>
p
先指向第一个结点,
然后根据结点
p
找到下一个结点?/p>
以此类推?/p>
直至找到所要访问的结点
或到最后一个结点(指针为空)为止?/p>
下面我们给出上述链表的输出函数;
void list::outputlist()
{
Node*current=head;
while(current!=NULL)
{
cout<<current->Data<<" ";
current=current->next;
}
cout<<endl;
}
3
?/p>
链表结点的插?/p>