【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

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

静态链表优缺点
优点:

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

缺点:

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

相关文章推荐

数据结构复习题(一)

一、单选题(每题 2 分,共20分) 1.栈和队列的共同特点是( )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2. 用链接方式存储的队列,在进行插入运算时( ). A. 仅修改头指针   B. 头、尾指针都要修改 C. 仅修改尾指针 D.头、尾指针可能都要修改 3. 以下数据结构中哪一个是非线性结构?( ) A. 队列  B. 栈 C. 线性

2.1.8 —线性表—3Sum

描述 Given an array S of n integers, are there elements a, b, c in S such that a+ b+ c = 0? Find all...

数据结构学习笔记(3.线性表之静态链表及柔性数组)

本节知识点: 1.静态链表到底是什么:链表就是链式存储的线性表,但是它分为动态和静态两种,所谓动态就是长度不固定,可以根据情况自行扩展大小的,静态链表就是长度大小固定的,链式存储的线性表。 2.本节的静态链表和顺序表很像(其实和数组也很像),准确的来说就是利用顺序表实现的,只是这个顺序表,不是顺序排列的,是通过一个next变量,连接到下一个变量的。 如图: <img alt="" src="

线性表 —— 3

 静态链表 游标 5 2 3 4 5 6 ...

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

本节知识点: 1.为什么选择循环链表:因为有很多生活中结构是循环的,是单链表解决不了的,比如星期、月份、24小时,对于这些循环的数据,循环链表就体现出它的优势了。 2.循环链表的结构: <img alt="" src="http://img.blog.csdn.net/20130819145651187?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWJoXzE5OTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gra
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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