六、线性表(3)

原创 2016年08月31日 10:54:18

静态链表

用数组描述的链表叫做静态链表。
对静态链表进行初始化相当于初始化数组:

Status InitList(StaticLinkList space)
{
    int i;
    for(i=0;i<MAXSIZE-1;i++)
    space[i[.cur=i+1;
    space[MAXSIZE-1].cur=0;
    return OK;
}

1、对数组的第一个和最后一个元素做特殊处理,他们的data不存放数据;
2、通常把未使用的数组元素称为备用链表;
3、数组的第一个元素,即下标为0的那个元素的游标就存放备用链表的第一个没有存放数据结点的下标;
4、数组的最后一个元素,即下标为maxsize-1的游标存放第一个有数组的元素的下标。相当于单链表的头结点;

静态链表的插入操作
为了辨明数组中哪些分量未被使用,解决的方法是将所有未被使用过的及已被删除的分量用游标链成一个备用的链表。

Status ListInsert(StaticLinkList L,int i,ElemType e)
{
    int j,k,l;
    k=MAX_SIZE-1;//数组的最后一个元素
    if(i<1||i>ListLength(L)+1)
    {
        return ERROR;
    }
    j=Malloc_SLL(L);//空闲的第一个分量的下标
    if(j)
    {
        L[j].data=e;
        for(l=1;l<=i-1;l++)
        {
            k=L[k].cur;
        }
        L[j].cur=L[k].cur;
        L[k].cur=j;
        return OK;
    }
    return ERROR;
}

如图,原数组为{A,C,D,E}若将B插入A后面,过程如下:
这里写图片描述

静态链表的删除操作
继上一个链表后,删除C元素,过程如图:
这里写图片描述

Status ListDelete(StaticLinkList L,int i)
{
    int j,k;
    if(i<1||i>ListLength(L))
    {
        return ERROR;
    }
    k=MAX_SIZE-1;
    for(j=1;j<=i-1;j++)
    {
        k=L[k].cur;
    }
    j=L[k].cur;
    Free_SLL(L,j);
    return OK;
}
//将下标为k的空闲结点回收到备用链表
void Free_SLL(StaticLinkList space,int k)
{
    space[k].cur=space[0].cur;
    space[0].cur=k;
}

//返回L中数据元素个数
int ListLength(StaticLinkList L)
{
    int j=0;
    int i=L[MAXSIZE-1].cur;
    while(i)
    {
        j=L[i].cur;
        j++;
    }
    return j;
}

静态链表优缺点
优点:

  • 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。

缺点:

  • 没有解决连续存储分配(数组)带来的表长难以确定的问题。
  • 失去了顺序存储结构随机存取的特性。
版权声明:本文为博主原创文章,未经博主允许不得转载。

[Coursera]数据结构基础_Week2_线性表_Q3

Coursera课程作业

线性表(3)--习题

1.带头结点的单链表head为空的判断条件是(B) A.head==NULL B.head->next==NULL C.head->next==head D.head!=NULL 2.不带头结点的...
  • Ramay7
  • Ramay7
  • 2015年08月27日 14:56
  • 1154

3_线性表_顺序存储

线性表之顺序存储结构线性表(List) 定义:零个或多个数据元素的有限序列 数学语言定义:a1,a2…ai…an ai有且只有一个前继元素 a(i-1)和 一个后继元素 a(i+1) 顺序存储结构 ...

[数据结构]第二章--线性表(读书笔记3)

2.3 线性表的链式表示和实现 □静态链表 有时,也可借用一维数组来描述线性表,同时用游标(指示器cur)代替指针指示结点在数组中的相对位置。数组的第0分量可看成头结点,其指针域指示链表的第一个结...

线性表3 – 数据结构和算法08

线性表3   让编程改变世界 Change the world by program   线性表的顺序存储结构   我们可以想象,线性表有两种物理存储结构:顺序存储结构和链式存储结构。...

数据结构(3)之线性表之顺序存储结构

1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一些叩响数据结构的大门。 2 详述 线性表(List):零个或者多个数...

数据结构(3)-线性表(静态链表)

用数组来描述单链表; 让数组的元素都是由两个数据域组成,data和cur。数组的每一个下标都对应一个data和cur。数据域data用来存放数据,而游标cur相当于单链表中的next,存放该元素的后...

数据结构学习笔记(3.线性表之循环链表)

本节知识点: 1.为什么选择循环链表:因为有很多生活中结构是循环的,是单链表解决不了的,比如星期、月份、24小时,对于这些循环的数据,循环链表就体现出它的优势了。 2.循环链表的结构: 循环链表就是...

【数据结构】-线性表-链表 熟练度max=3(不建立新节点,使链表L倒序)

要求不建立新节点,使链表L倒序反转前:1 2 3 4 5 6 7 8 9 10反转后:10 9 8 7 6 5 4 3 2 1#include #include #include typedef st...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:六、线性表(3)
举报原因:
原因补充:

(最多只允许输入30个字)