《大话数据结构》第三章

线性表

  • 定义:零个或多个数据元素的有限序列

  • 线性表的抽象数据类型定义:在这里插入图片描述在这里插入图片描述

  • 实现两个线性表集合A和B的并集操作。即:A=A U B :在这里插入图片描述

  • 线性表的顺序存储的结构代码:在这里插入图片描述

  • 线性表中第i+1个数据元素的位置和第i个数据元素的存储位置如下:在这里插入图片描述

  • 获得元素操作:在这里插入图片描述

  • 在这里插入图片描述

  • 插入算法实现思路:

     如果插入位置不合理,抛出异常;
     如果线性长度大于数组长度,则抛出异常或动态增加容量;
     从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
     将要插入元素填入位置i处;
     表长加1。
    
  • 代码实现如下:在这里插入图片描述

  • 删除算法实现思路:

     如果删除位置不合理,抛出异常;
     取出删除元素;
     从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
     表长减1。
    
  • 代码实现如下:在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

     存储和读取数据时,无论在哪个位置,时间复制度都是O(1);
     而插入和删除时,时间复杂度都是O(n)
    
  • 线性表顺序存储结构的优缺点:在这里插入图片描述

  • x线性表链式存储结构定义:在这里插入图片描述

  • 头结点:在链表的第一个结点前附设的一个结点,数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息,头结点的指针域存储指向第一个结点的指针:在这里插入图片描述

  • 头指针与头结点的异同:

     头指针:
     		链表指向的第一个结点的指针,若链表有头结点,则指向头结点的指针
     		头指针具有标识作用,所以常用头指针冠以链表的名字
     		无论链表是否为空,头指针均不为空。头指针是链表的必要元素
     
     头结点:
     		头结点是为了操作的统一和方便而设立的;放在第一元素的结点之前,其数据域一般无意义(也可以放链表的长度)
     		有了头结点,对在第一元素点前插入结点和删除第一结点,其操作与其它结点的操作就统一了
     		头结点不一定是链表的必要元素
    

单链表在C语音中的实现

/*线性表的单链表存储结构*/
typedef struct Node
{
	ElemType data;
	struct Node *next;
} Node;
typedef struct Node *LinkList;  /*定义LinkList*/
  • 单链表的读取:在这里插入图片描述在这里插入图片描述
  • 单链表的插入:在这里插入图片描述
  • 单链表的删除:在这里插入图片描述
  • 单链表的整表创建:

猜你喜欢

转载自blog.csdn.net/qq_31709953/article/details/92408376