线性表及其链式表示

线性表及其链式表示

线性链表

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分信息组成的数据元素ai的存储映像,称为 节点 (node)。它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继元素存储位置的域称为指针域。指针域中存储的信息乘坐指针或链。n个节点(ai(1 <= i <= n)的存储映像)链结成一个链表,即为线性表(a1,a2,…,an)的链式存储结构。又由于此链表的每个节点中只包含一个指针域,固又称线性链表或单链表

线性链表与线性表的顺序表比较

线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻。因为线性表的顺序存储方式是使用数组来存放数据的,而数组是计算机内存上一段连续的存储空间。但是链表不要求逻辑上相邻的元素在物理位置上也相邻,因为链表的元素之间使用指针一一相连的,后一个节点的位置信息储存在前一个节点的指针域中,因此即使它们相隔十万八千里,也可以通过指针这条高速公路互相连接。
顺序存储结构的特点决定了它存在一系列弱点,例如在进行插入和删除操作时,必须移动大量元素。但是链表不存在这种缺点,但是也失去了顺序表可随机存储的优点。

线性表的链式存储的表示和实现

  • 生成节点
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}L, *List;
  • 求表长
int Length(List PtrL)
{
    int i = 1;
    while(PtrL -> next)
    {
        PtrL = PtrL -> next;
        i ++;
    }
    return i;
}
  • 查找链表中值为x的元素,返回其第一次出现位置
List Find(ElemType x, List PtrL)
{
    List p = PtrL;
    while(p -> data != x && p)
        p = p -> next;
    if(p -> data == x)
        return p;
    else
        return NULL;
}
  • 在第i-1(1 <= i <= n + 1)个节点后插入一个值为x的新节点
List Insert(List PtrL, ElemType x, int i)
{
    int count = 1;
    List PtrNew, p;
    PtrNew = (List)malloc(sizeof(L));
    PtrNew -> data = x;
    PtrNew -> next = NULL;
    p = PtrL;
    while(count <= i - 1)
    {
        p = p -> next;
        count ++;
    }
    if(i == 1)
    {
        PtrNew -> next = p;
        return p;
    }
    else
    {
        PtrNew -> next = p -> next;
        p -> next = PtrNew;
        return p;
    }   
}
  • 删除链表的第i(1 <= i <= n)个位置上的节点
List Delete(List PtrL, int i)
{
    int count = 1;
    List p, temp;
    p = PtrL;
    while(count < i)
    {
        p = p -> next;
        count ++;
    }
    temp = p;
    p = p -> next;
    free(temp);
    return p;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
线性表是一种常见的数据结构,它包含了一组有序的元素元素之间具有前驱和后继关系。线性表链式表示是其中一种实现方式。 线性表链式表示通过使用节点和指针来表示表中元素之间的关系。具体来说,每个节点中都包含了一个元素和一个指向下一个节点的指针。通过不断地遍历指针,就可以顺着链表找到表中的所有元素链式表示的优点是可以动态地插入和删除元素,而不需要移动其他元素。这是因为链表中的节点通过指针相互连接,可以在任意位置插入和删除元素。同时,链式表示可以节省内存空间,因为节点不需要连续的存储空间,可以灵活地分配内存。 实现链式表示的方式是使用结构体来定义节点和指针。节点结构体中包含了一个元素和一个指向下一个节点的指针。使用指针的方式可以实现链表节点之间的相互连接。 在C语言中,可以通过定义一个节点结构体来表示链表的节点,然后使用指针指向链表的头节点。通过遍历指针,可以遍历整个链表,并对链表进行插入、删除等操作。 总之,线性表链式表示通过节点和指针的方式来实现表中元素之间的关系。链式表示可以动态地插入和删除元素,并且节省内存空间。在C语言中,可以通过定义节点结构体和指针来实现链式表示,实现链表的各种操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值