六、线性表(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;
}

静态链表优缺点
优点:

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

缺点:

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

相关文章推荐

3.数据结构--线性表之一元多项式的加法与乘法运算

设计一个函数,分别求出两个一元多项式的和与成绩 ##输入样例 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 #输出结果 5 20 -4 4 -5 2 9 1 -2 0 15 ...

数据结构(3)--线性表实现一元多项式加法

1.简要说明     一元多项式的表示和相加     多项式Pn(x)按升幂可写成:              ...

Data Structure(1-3)---线性表的链式存储结构

单链表为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai来说,除了储存其本身的信息外,还需要储存一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为...

PAT DS 3-05求链式线性表的倒数第K项

本想会很快写出来的程序,最后总是
  • ZF180
  • ZF180
  • 2014-06-30 16:57
  • 1753

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

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

程序猿必修课之数据结构(五)线性表3

原文:http://www.jianshu.com/p/082eb306d228上一章:程序猿必修课之数据结构(四)线性表2循环链表对于单链表,由于每个结点只存储了向后的指针,到了链表末尾就停止了向后...

3.线性表的应用-一元多项式的计算

1.理论 多项式可以很容易的表示为线性表如

(3)线性表:顺序表

线性表:       是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且...

数据结构3:线性表的静态链表的表示和实现

静态链表其实就是利用数组来完成链表的功能,此项功能主要是用于木有
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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