当前位置:   article > 正文

(详解)数据结构线性表的创建——前插法、后插法_线性表的后插入

线性表的后插入

目录

引言

一、结点的定义

二、前插法(头插法)创建单链表

1.步骤:

2.算法描述:

3.时间复杂度:

三、后插法(尾插法)创建单链表

1.步骤:

2.算法描述:

3.时间复杂度:


引言

        前插法与后插法属于链表的创建方法。

        链表的创建与顺序表不同,链表是一种动态结构。整个可用存储空间可以为多个 链表共同享用,每个链表不需要像顺序表那样提前分配好占用空间,而是由系统按照需求即使生成。

        即从空表的初始化后,依次建立各元素结点,并逐个插入链表。


一、结点的定义

        在创建链表之前,需要自定义结点类型。

  1. typedef struct
  2. {
  3. char data;
  4. struct node* next;
  5. }LinkList;

二、前插法(头插法)创建单链表

        前插法(头插法)是通过将新结点逐个插入链表的头部(头结点之后)来创建链表,每次申请一个新结点,读入相应的数据元素值,然后将新结点插入到头结点之后。

1.步骤:

  1. 创建一个只有头结点的空链表。
  2. 根据带创建链表包括的元素个数n,循环n次执行以下操作:
  • 生成一个新结点*p;
  • 输入元素值赋给新结点*p的数据域;
  • 将新结点*p插入到头结点之后。
图1 前插法创建单链表

2.算法描述:

  1. void CreateList_H(LinkList $L, int n) {
  2. //逆位序输入n个元素的值,建立代表头结点的单链表L
  3. L = new LNode;
  4. L->next = NULL; //先建立一个带头结点的空链表
  5. for (i = 0; i < n; i++) {
  6. p = new LNode; //生成新结点*P
  7. cin >> p->data; //输入元素值赋给新结点*p的数据域
  8. p->next = L->next; L->next = p; //将新结点*p插入到头结点之后
  9. }
  10. }

3.时间复杂度:

        前插法的时间复杂度为O(n)。


三、后插法(尾插法)创建单链表

        后插法是通过将新结点逐个插入链表的尾部来创建链表。与前插法一致,每次申请一个新结点,读入相应的数据元素值。除此之外,必须增加一个尾指针,使其始终指向当前链表的尾结点。

1.步骤:

  1. 创建一个只有头结点的空链表。
  2. 尾指针r初始化,指向头节点。
  3. 根据创建链表包括的元素个数n,循环n次执行以下操作:
  • 生成一个新结点*p;
  • 输入元素值赋给新结点*p的数据域;
  • 将新结点*p插入尾结点*r之后;
  • 尾指针r指向新的尾结点*p。
图2 后插法创建单链表

2.算法描述:

  1. void CreateList_R(LinkList $L, int n) {
  2. //正位序输入n个元素的值,建立代表头结点的单链表L
  3. L = new LNode;
  4. L->next = NULL;
  5. r = L;
  6. for (i = 0; i < n; i++) {
  7. p = new LNode; //生成新结点*P
  8. cin >> p->data; //输入元素值赋给新结点*p的数据域
  9. p->next = NULL; r->next = p; //将新结点*p插入到尾结点*r之后
  10. r = p; //r指向新的尾结点*p
  11. }
  12. }

3.时间复杂度:

        后插法的时间复杂度为O(n)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/543684
推荐阅读
相关标签
  

闽ICP备14008679号