数据结构——线性表

线性表:相同类型数据元素的线性集合

  1、特性:(1)存在唯一第一个元素和唯一的最后一个元素。

        (2)除首元素外其余元素都存在唯一前驱除尾元素外其余元素都存在唯一后继

        (3)当一个数据元素存在多个数据项时,被称为记录,而含有大量记录的线性表,又被称为文件。

        (4)线性表可分为定长线性表和动态线性表。

  2、基本操作:存取、插入、删除、查找、排序、合并、分割。

  3、存储映像:

     ***顺序存储 :用一组地址连续的存储单元依次存储线性表的数据元素。此时线性表在物理存储和逻辑上都是连续的。通常使用数组进行实现。

         (1)C语言数据类型的定义:

typedef struct SqList
{
    ElemType   *elem;  //存储空间基地址
    int        length;  //当前长度
    int        listsize;  //当前分配的存储容量(以sizeof(ElemType)为单位)

}SqList;

        (2)特性:  ——优点:可以随机存取数据元素,属于一种随机存取的存储结构。每一个存储位置可用一个简单直观的公式来表示。

            ——缺点:在执行插入与删除操作时,需要移动大量元素;且存在空间利用率不高的情况,即出现空间分配不足或过剩。

        (3)附加: ——插入一个元素时移动元素次数的期望值:E(x) = n/2

           

            ——删除一个元素时移动元素次数的期望值:E(y) = (n-1)/2

    ***链式存储:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的) 。此时线性表在逻辑上是连续的,在物理上允许不连续。通常用链表进行实现。

        (1)C语言数据类型的定义:

        

typedef struct LNode
{
   ElemType     data;  //数据域
   struct LNode   *next; //指针域

}LNode,*LinkList;//定义结构体的指针类型

        (2)特性:——结构特点:只存在一个指针域;可以建立头节点(头节点数据域可以不存储任何信息,也可以存储附加信息)。

               ——优点:方便执行插入与删除操作(实际在是执行插入与删除操作之前,需要先通过查找操作定位到待操作的位置)。

               ——缺点:失去了随机存储的特性,并且查找操作将占用大量时间资源

        (3)附件:——当插入与删除属于原子操作时,时间复杂度为O(1),当加入查找过程,时间复杂度变为O(n);查找操作的时间复杂度为O(n)。

               ——静态链表用数组模拟链式存储。拥有两个数据域,一个用于存储数据元素,一个用于存储该元素在线性表中的相对位置。

               ——循环链表:尾节点指针域指向首结点或头结点。

               ——双向链表:存在两个指针域,一个用于指向前驱,一个用于指向后继。

               ——双向循环线性表:同时拥有循环链表和双向链表的特性。

  

稳定算法的特征:重复元素之间的相对次序在排序前后保持一致,反之,不具有这一特征的排序算法都是不稳定算法。

 

posted @ 2018-12-24 20:56  怪兽不纯粹  阅读(171)  评论(0)    收藏  举报