单链表

单链表

1、链接存储方法

链接方式存储的线性表简称为链表(Linked List)。

链表的具体存储表示为:

① 用一组任意的 存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)

② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在 存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为 指针(pointer)或链(link))

注意:

链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的 数据结构。

2、链表的结点结构

┌───┬───┐

│data │next │

└───┴───┘

data域--存放结点值的数据域

next域--存放结点的直接后继的地址(位置)的 指针域(链域)

注意:

①链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的。

②每个结点只有一个链域的链表称为单链表(Single Linked List)。

【例】线性表(bat,cat,eat,fat,hat, jat,lat,mat)的单链表示如示意图

3、头 指针head和 终端结点指针域的表示

单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。

注意:

链表由头 指针唯一确定,单链表可以用头指针的名字来命名。

终端结点无后继,故终端结点的 指针域为空,即NULL。

4、单链表的一般图示法

由于我们常常只注重结点间的逻辑顺序,不关心每个结点的实际位置,可以用箭头来表示链域中的 指针,线性表(bat,cat,fat,hat, jat,lat,mat)的单链表就可以表示为下图形式。

单链表的建立

链表操作中 动态存储分配要使用 标准函数,先介绍一下这些函数。

(1)malloc(size)

在内存的 动态存储区申请一个长度为size字节的连续空间。

(2)calloc(n,size)

在内存的 动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。若此函数未被成功执行,函数返回值为0。

(3)free(p)

释放由 指针p所指向的存储单元,而存储单元的大小是最近一次调用malloc()或calloc()函数时所申请的 存储空间。

头文件\"stdlib.h”中包含了这些函数的信息,使用这些函数时需在程序开头用文件包含指令#include“stdlib.h”指明。

单链接的基本操作:实现带头结点的单链表的建立,求长度,取元素,修改元素,删除等单链接的基本操作。

基本要求:

1:依次从键盘读入数据,建立带头接头的单链表;

2:输出单链表中的数据元素;

3:求单链接表的长度;

4:根据指定条件能够取元素和修改元素;

5:实现在指定位置插入和删除的功能。

  1. add() 添加元素
  2. clear() 清空链表
  3. contains(data) 是否包含元素
  4. display() 显示链表
  5. get(position) 得到索引位置的元素
  6. isEmpty() 链表是否为空
  7. remove(position) 移除索引位置的元素
  8. reverse() 倒置链表
  9. set(position, data) 向链表指定位置设置修改元素
  10. size() 返回链表的长度

var Node = function (data) { this.data = data; this.next = null;};单链表中的数据域和指针域

链表的每个元素都包含什么:

一个 node 里面包含data和 pointer

data 定于链表数据域

pointer 链表中的指针


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值