美文网首页
静态链表的相关操作

静态链表的相关操作

作者: Jorunk | 来源:发表于2020-01-16 18:01 被阅读0次

线性表的静态链表存储结构
#define MAXSIZE 1000
typedef struct
{
  ElemType data;  // 数据
  int cur;        // 游标(Cursor)
} Component, StaticLinkList[MAXSIZE];

对静态链表进行初始化相当于初始化数组:
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;
}


/* 在静态链表L中第i个元素之前插入新的数据元素e */

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;
}
/* 删除在L中的第i个数据元素 */
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;    // k1 = 1, k2 = 5
    }

    j = L[k].cur;        // j = 2
    L[k].cur = L[j].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)
    {
        i = L[i].cur;
        j++;
    }

    return j;
}
  • 优点:
    • 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。
  • 缺点:
    • 没有解决连续存储分配(数组)带来的表长难以确定的问题。
      失去了顺序存储结构随机存取的特性。

相关文章

  • 静态链表的相关操作

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

  • [数据结构]第二章线性表(6)——静态链表

    静态链表 什么是静态链表? 定义一个静态链表 方法1: 方法2: 验证方法2的定义方法 基本操作 总结反思 源码 ...

  • Java实现静态链表

    今天复习到静态链表。自己简单实现了静态链表的基本操作,记录一下

  • 数据结构(静态链表的基础操作)

    静态链表的基础操作的前提是已经成功创建静态链表的基础上 静态链表中添加元素 加入将元素4添加到上静态链表中第3个位...

  • 静态链表

    01 静态链表 静态链表神似顺序表,不过它存储了指向下一节点的游标。 02 基本操作 静态链表是用数组的方式实现的...

  • 链表的相关操作

  • Java常用类库与技巧-集合

    一 数据结构常见问题 数组和链表的区别;链表的操作,如反转,链表环路检测,双向链表,循环链表相关操作;队列,栈的应...

  • 静态类的相关操作

    静态类的相关操作(1) 静态类的相关操作(2) 从上面的截图可以发现当我们将B类的对象给A静态类中的$aa静态变量...

  • 静态链表及C#实现

    静态链表 静态链表是用数组模拟动态链表。 静态链表结构描述 首先,静态链表使用数组来模拟动态链表。数组存放一个节点...

  • 线性表的静态链表

    静态链表定义 静态链表的增删

网友评论

      本文标题:静态链表的相关操作

      本文链接:https://www.haomeiwen.com/subject/wnlsvxtx.html