线性链表 — 单链表

墨蓝 2022-04-16 03:40 540阅读 0赞

线性链表存储结构的特点:用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也可以是不连续的)

数据元素a与其直接后继a+1之间的逻辑关系,对数据元素a来说,除了存储其本身信息外,还需要存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素a的存储映像,称为结点( node)

它包括两个域:存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。指针域中存储的信息称为指针

n个结点(ai(1i≤n)的存储映像)链结成一个链表,即为线性表的式存储结构。又因为此链表的每一个结点中只包含一个指针域,故又称线性链表单链表

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZ2VsaWE2MjA_size_16_color_FFFFFF_t_70

链表是从头指针开始,头指针的信息就是第一个结点(即第一个数据元素的存储映像)存储地址。最后一个数据元素没有直接后继,故线性链表的最后一个结点的指针为“(NULL)

指针是数据元素之间的逻辑关系的映像。

逻辑上相邻的两个数据元素其存储的物理位置不要求相邻,这种存储结构为非顺序映像链式映像

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZ2VsaWE2MjA_size_16_color_FFFFFF_t_70 1

头结点:在单链表的第一个结点之前设一个结点。头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)

  1. Status GetElem_L(LinkList L,int i,ElemType &e){
  2. //L为带头结点的单链表的头指针
  3. //当第i个元素存在时,其赋值给e并返回OK值,否则返回ERROR
  4. p = L -> next;j=1;//初始化L,p指向第一个结点,j为计数器
  5. while(P && j < i){//顺指针向后查找,知道p指向第i个元素或p为空
  6. p = p -> next;
  7. ++j;
  8. }
  9. if(!p || j>i) return ERROR;//第i个元素不存在
  10. e = p -> data;//取第i个元素
  11. return OK;
  12. }GetElem_L

时间复杂度:O(n)

单链表的插入与删除:

插入算法:

2018111618041960.png

  1. Status ListInsert_L(LinkList &L, int i,ElemType e){
  2. //在带头结点的单链线性表L中第i个位置插入元素e
  3. p = L; j = 0;
  4. while(p && j<i-1){//寻找第i-1个结点
  5. p=p->next;
  6. ++j;
  7. }
  8. if(!p || j>i-1) return ERROR;
  9. s=(LinkList)malloc(sizeof(LNode));//生成新的结点
  10. s->data=e;s->next=p->next;//插入到L中
  11. p->next=s;
  12. return OK;
  13. }//ListInsert_L

s=(LinkList)malloc(sizeof(LNode));作用是游戏厅生成一个LNode型的结点,同时将该结点的起始位置赋值给指针变量s

时间复杂度:O(n)

删除算法:

20181116180436356.png

  1. Status ListDelete_L(LinkList &L, int i,ElemType e){
  2. //在带头结点的单链线性表L中删除第i个位置的元素,并由e返回其值
  3. p = L; j = 0;
  4. while(p && j<i){//寻找第i个结点,并令p指向其前驱
  5. p=p->next;
  6. ++j;
  7. }
  8. if(!p || j>i-1) return ERROR;
  9. q=p->next; p->next=q->next;//删除并释放结点
  10. e=q->data;
  11. free(q);//粒子还给系统
  12. return OK;
  13. }//ListDelete_L

free(q);作用是由系统回收一个LNode型的结点,回收后的空间可以备做再次生成结点时用

时间复杂度:O(n)

发表评论

表情:
评论列表 (有 0 条评论,540人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线性

    线性表的链式存储结构 链式存储定义:为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。 ![SouthEas

    相关 线性 — 双向

    循环链表:特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。从表中任一结点出发均可找到表中其他结点。 双向链表:特点是结点有两个指针域(一个指向直接前驱,一个指向

    相关 线性

    线性链表存储结构的特点:用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也可以是不连续的) 数据元素a与其直接后继a+1之间的逻辑关系,对数据元素a来说,除了