首页 > 其他 > 详细

线性表链式存储的简单使用

时间:2020-07-05 19:53:33      阅读:41      评论:0      收藏:0      [点我收藏+]

线性结构的逻辑结构就是一对一的关系,除了首尾节点外每个节点都有唯一的前驱和唯一的后继,

线性结构中最常见的就是线性表,而研究某一个结构上面的操作,就先要让他可以在计算机中表示,即怎么存储他,线性表有顺序存储,也有链式存储,

上次说了顺序存储,有的小伙伴会发现,这个顺序存储插入,删除操作也太麻烦了吧,这些操作需要移动很多元素啊,那么有没有使插入,删除操作简单点的存储结构呢,

下面来说说线性表的链式存储和用链式储存后对线性表的相关操作,链式存储一般有两个域,一个数据域,一个指针域,他们仅仅是逻辑地址相邻,物理地址不一定相邻,链式存储的好处就是可以扩容,插入,删除操作也比顺序存储简单,当然他也有不足的地方,他不能随机访问,必须顺序访问,

1.定义线性表的节点

//定义链表的节点
typedef struct LNode
{
    int num;           //节点数据域
    struct LNode* next;   //节点指针域
}LNode,*LinkList;

2.初始化操作

//初始化
int InitList(LinkList *L)   
{
    *L= (LNode *)malloc(sizeof(LNode));  
    *L->next = NULL;
    return 0;
}

3.取第i个元素操作

//取值
int GetElem(LinkList L, int i)
{
    L = L->next;
    int j = 1;
    while (L&&j<i)
    {
        L = L->next;
        j++;
    }
    if (!L||i<j)
    {
        return -1;
    }
    else
    {
        return L->num;
    }

}

4.查找操作

//查找
LinkList LocateElem(LinkList L,int e)
{
    L = L->next;
    while (L&&L->num!=e)
    {
        L = L->next;
    }
    return p;
}

 

5.插入操作

//插入
int ListInsert(LinkList *L, int i, int e)
{
    int j = 0;
    while (*L&&(j<i-1))
    {
        (*L) = (*L)->next;
        j++;
    }
    if (!(*L)||j>i-1)
    {
        return -1;
    }
    LNode* p = (LNode*)malloc(sizeof(LNode));
    p->num = e;
    p->next = (*L)->next;
    (*L)->next = p;
    return 0;
}

6.删除操作

//删除
int ListDelete(LinkList *L, int i)
{
    int j = 0;
    while (*L&&j<i-1)
    {
        (*L) = (*L)->next;
        j++;
    }
    if (*L||(j<i-1))
    {
        return -1;
    }
    (*L)->next = (*L)->next->next;
    free((*L)->next);
    return 0;
}

 

好了,我们下回见,peace

线性表链式存储的简单使用

原文:https://www.cnblogs.com/gitpy123/p/13248006.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!