一、链表是什么
1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。
2、结点包括两个部分:一、存储数据元素的数据域(内存空间),二、存储指向下一个结点地址的指针域。
3、相对于线性表顺序结构,操作复杂。
二、链表的作用
1、实现数据元素的存储按一定顺序储存,允许在任意位置插入和删除结点。
2、包括单向结点,双向结点,循环接点
3、c/c++/jave都可以实现
三、链表的优缺点
优点、链表实现数据元素储存的顺序储存,是连续的
缺点、因为含有大量的指针域,所以占用空间大,同时因为只有头结点(后面说明)是明确知道地址的,所以查找链表中的元素需要从头开始寻找,非常麻烦。
四、代码的实现(c++为例)
结点格式
struct 结点的类型名
{
数据成员的定义;
struct 结点类型名 *指针名;
}
先建立一个链表结点结构(以学生链表为例)
struct student
{
string name;
float score;
struct studeng *next;
}
typedef student NODE;
1、头结点
链表的第一个结点,不储存数据,为方便查询设立的结点。若头结点指针域为空,链表为空。
NODE *newp,*head,*p;
newp=new student;
head=newp;
head->next=NULL;
2、创建新结点
newp=new student
3、插入新结点
void InsertNode(NODE *p,NODE *newp)
{
newp->next=p->next;
p-next=newp;
}
4、删除结点
void DelNode(NODE *p)
{
NODE *q;//临时结点
if(p->next!=NULL){
q=p->next;
p->next=q->next;
delete q;
}
}
5、查询(按关键字小于key)
NODE *Search(NODE *head,int key)
{
NODE *p;
p=head;
while(p->next!=NULL)
{
if(p->next->scorce<key)
return p;
p=p->next;
}
return p;