线性表-链式存储

本文介绍了单链表的链式存储结构,包括如何定义结点类型和指针类型。详细阐述了单链表的基本操作,如初始化链表、查找、插入、删除和输出操作的时间复杂度及其具体步骤。特别地,提到了头插法和尾插法建立单链表的两种方法。
摘要由CSDN通过智能技术生成
1.链表的简要概况
由于顺序存储具有一些局限性,例如:顺序表需要**预分配**一定的空间,所以可能造成空间的浪费或者是空间不够用的情况;顺序表的插入和删除都需要**移动大量的元素**,导致插入和删除的时间复杂度高。
所以,如果线性表要频繁的进行插入和删除操作时,就常常采用链式存储结构,链式存储结构不要求逻辑上相邻的数据元素在物理上也相邻,因此只能沿着某个指针进行**顺序存取**。
链表由一个个结点通过指针链接而成,每一个结点包含存放数据元素值的***数据域***和存放指向逻辑上相邻结点的***指针域***。

单链表的存储结构可以表示为:

typedef int ElemType;
typedef struct LNode{
   
	ElemType data;          //数据域
	struct LNode *next;     //指针域
}LNode,*LinkList;

上述描述中,将单链表的结点类型命名为LNode,而将指向结点的指针类型命名为LinkList。

2.单链表上基本操作的实现
(1)初始化一个链表

LinkList InitList()
{
   
    LinkList L = (LinkList)malloc(sizeof(LNode));   //为头结点分配空间
    L->next = NULL;                                 //头结点的下一个指向为空
    return L;                                       
}

(2)单链表上的查找操作-时间复杂度为O(n)

/1) 查找线性表中位序号为i的数据元素结点,如果查找成功,返回元素值
Status GetElem(LinkList L,int i,ElemType *e){
   
    LinkList p;
    p = L;
    for(int j=1;j<=i;j++){
   
        p = p->next;
    }
    e = &(p->data);
    return OK;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值