ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大话数据结构学习③线性表的静态链表存储结构

2022-02-27 13:04:44  阅读:157  来源: 互联网

标签:Status 线性表 int 链表 静态 MAXSIZE 数据结构 cur


#define MAXSIZE 1000
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;

typedef struct
{
    ElemType data;                    // 存放数据元素
    int cur;                          // 当前位置
} Component, StaticLinkList[MAXSIZE]; // 定义静态链表

//初始化静态链表
Status InitList(StaticLinkList space)
{
    int i;
    for (i = 0; i < MAXSIZE; i++)
    {
        space[i].cur = i + 1; // 初始化每个结点的cur域
    }
    space[MAXSIZE - 1].cur = 0; // 将最后一个元素的cur设置为0
    return OK;
}

//静态链表的插入操作
Status ListInsert(StaticLinkList L, int i, ElemType e)
{
    int j, k, l;
    k = MAXSIZE - 1;
    if (i < 1 || i > ListLength(L))
    {
        return ERROR;
    }
    j = Malloc_SSl(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;
}

//静态链表删除操作
Status ListDelete(StaticLinkList l, int i)
{
    int j, k;
    if (i < 1 || i > ListLength(l))
    {
        return ERROR;
    }
    k = MAXSIZE - 1;
    for (j = 1; j <= i - 1; j++)
    {
        k = l[k].cur;
    }
    J = l[k].cur;
    l[k].cur = l[J].cur;
    Free_SSl(L, J);
    return OK;
}

// 若备用链表非空,则返回分配的节点下标,否则返回0
int Malloc_SSl(StaticLinkList space)
{
    int i = space[0].cur; // 获取当前数组返回第一个元素的cur域
    if (space[0].cur)     //如果存在
    {
        space[0].cur = space[i].cur; // 将空闲节点的cur域赋值给头元素的cur域
    }
    return i; // 返回空闲节点的位置
}

//将下标为i的空闲节点回收到备用链表
void Free_SSl(StaticLinkList L, int i)
{
    L[i].cur = L[0].cur;
    L[0].cur = i;
}

// 返回长度
int ListLength(StaticLinkList L)
{
    int j = 0;
    int i = [MAXSIZE - 1].cur;
    while (i)
    {
        i = L[i].cur;
        j++;
    }
    return j;
}

/*
 *  静态链表优点:插入和删除的时候只需要修改游标,不需要移动元素,从而改进了顺序存储结构中插入和删除操作需要移动大量元素的缺点。
    静态链表缺点:没有解决连续存储分配带来的表长难以确定的问题,失去了链式存储结构随机存储的特性。
 * 
 * /

静态链表其实是为了给没有指针的高级语言设计的一种实现单链表能力的方法。很少用,但是也可以学习其思想。(。◕ˇ∀ˇ◕)

标签:Status,线性表,int,链表,静态,MAXSIZE,数据结构,cur
来源: https://www.cnblogs.com/hg-blogs/p/15942014.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有