线性表的链式存储结构

本文详细介绍了线性表链式存储结构,包括其特点(数据元素可连续或不连续,每个节点含数据和指针),并提供了单链表的读取、插入和删除操作的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.线性表链式存储结构定义

2.线性表链式存储结构代码描述


1.线性表链式存储结构定义

1.线性表的链式存储结构的特点是用一组任的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。

2.在链式存储结构中每一个结点除了存储数据元素之外,还需存储一个指示其直接后继的信息。我们把存储数据元素信息的欲称为数据欲,把存储直接后继位置的欲称为指针域。指针域中存储的信息称为指针或链。

3.N个节点链接成一个链表,即为线性表的链式存储结构。因为此链表的每个结点中只包含一个指针域,所以叫做单链表。

4.我们把链表中第一个结点的存储位置叫做头指针,线性链表的最后一个结点指针为空。有时,我们为了更加方便的对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头结点。

2.线性表链式存储结构代码描述

1.线性表的单链表存储结构。

代码如下:

typedef struct Node            //声明结点的类型和指向结点的类型指针

{

    ElemType data;

    struct Node *next;

}Node;

typedef sruct Node *LinkList;        //定义一个指向结点的指针

2.单链表的读取

代码如下:

/*初始条件:链式线性表L已存在,1<=i<=ListLength(L) */

/*操作结果:用e返回L中第i个数据元素的值 */

Status GetElem(LinkList L,int i,ElemType *e)

{

int j;

LinkList p;        //声明一个结点

p=L->next;        //让p指向链表的第一个结点

j=1;        //j为计数器

while(p&&j<i)        //p不为空或者计数器 j还没有等于i时,循环继续

    {

        p=p->next;        //让p指向下一个结点

        ++j;

    }

if(!p||j>i)        //如果第i个元素不存在

    return ERROR;

*e=p->data;        //获取第i个元素数据

return OK;

}

3.单链表的插入

代码如下:

/*初始条件同上*/

/*操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */

Status ListInsert(LinkList *L,int i,Elemtype e)

{

    int j;

    LinkList p,s;

    p=*L;

    j=1;

    while(p && j<i)        //寻找第i个结点

    {    

        p=p->next;

        ++j;

    }

    if(!p||j>i)        //如果第i个元素不存在

        return ERROR;

    s=(LinkList)malloc(sizeof(Node));        //开辟一段空间,生成一个新结点

    s->data=e;

    s->next=p->next;        //将p的后继结点赋值给s的后继

    p->next=s;        //将s赋值给p的后继

    return OK;

}

4.单链表的删除

代码如下:

/*初始条件同上*/

//操作结果:删除L的第i个数据元素,用e返回其值,L的长度减1

Status ListDelete(LinkList *L,int i,ElemType *e)

{

    int j;

    LinkList p,q;

    p=*L;

j=1;

    while(p->next&&j<i)        //找寻第i个元素

    {

        p=p->next;

        ++j;

    }

    if(!(p->next)||j>i)        //第i个元素不存在

        return ERROR;

    q=p->next;

    p->next=q->next;        //将q的后继赋值给p的后继

    *e=q->data;        //将q结点中的数据给e

    free(q);        //让系统收回此结点,释放内存

    return OK;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值