关于链表的总结以及其作用

一、链表是什么

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;




  • 11
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
显式空闲链表和隐式空闲链表是在操作系统中用于管理内存分配和释放的两种常见技术。 1. 显式空闲链表(Explicit Free List): 显式空闲链表是一种内存管理技术,其中使用一个链表来追踪可用的空闲内存块。每个空闲块都包含一个头部,其中包含了指向下一个空闲块的指针。该链表的头部指针指向第一个空闲块。当需要分配内存时,系统会遍历链表,找到合适大小的空闲块,并将其分配出去。当释放内存时,系统将释放的块添加回链表中,并进行合并操作,以便形成更大的连续空闲块。 2. 隐式空闲链表(Implicit Free List): 隐式空闲链表是另一种内存管理技术,其中空闲块的信息被存储在已分配块的头部。每个已分配块的头部包含了该块的大小信息和一个标志位,用于指示该块是否被分配。当某个块被释放时,系统会检查其前后相邻的块是否也是空闲的,并进行相应的合并操作。这样就隐式地形成了一条空闲块链表。当需要分配内存时,系统会遍历整个内存区域,查找合适大小的空闲块,并进行分割。隐式空闲链表的好处是可以节省一些空间,因为不需要额外的指针来维护链表总结来说,显式空闲链表使用一个专门的链表来维护空闲块,而隐式空闲链表则将空闲块的信息存储在已分配块的头部。这两种技术在内存管理中起着重要的作用,并且在不同的情况下可能会有不同的性能表现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值