数据结构第2章线性表

 

       线性表这一章具体的讲解了数据结构的分类即逻辑结构和存储结构,因此本章第一节从线性表的逻辑结构让我们对线性表的定义和线性表的抽象数据类型的定义有了全面的了解,而二三节讲解线性表的存储结构 即顺序表采用顺序存储结构,即用一段地址连续的存储单元依次存储线性表的数据元素,数据元素之间的逻辑关系通过存储位置来实现。链表采用链接存储结构,即用一组任意的存储单元存放线性表的元素,用指针来反映数据元素之间的逻辑关系。第四节则是顺序表和链表的比较,第五节使线性表的其他储存。

第一节      

                                    线性表的定义:简称表,是n(n〉=0)个具有相同类型的数据元素的有限序列,线性表中数                                据元素的个数为线性表的长度。长度为0时成为空表,一个非空表通常记为(L=a1a2......an)

线性表的逻辑结构{

                                                  线性表的抽象数据类型的定义

ADT List
Data
      线性表中的数据元素具有相同类型,
      相邻元素具有前驱和后继关系
Operation
InitList
    前置条件:表不存在
    输入:无
    功能:表的初始化
    输出: 无
    后置条件:建一个空表


DestroyList
    前置条件:表已存在
    输入:无
    功能:销毁表
    输出:无
    后置条件:释放表所占用的存储空间
Length
    前置条件:表已存在
     输入:无
     功能:求表的长度
     输出:表中数据元素的个数                                             
     后置条件:表不变
Get                               
    前置条件:表已存在
    输入:元素的序号i
    功能:在表中取序号为i的数据元素
    输出:若i合法,返回序号为i的元素值,否则抛出异常
    后置条件:表不变
Locate
    前置条件:表已存在
    输入:数据元素x
    功能:在线性表中查找值等于x的元素
    输出:若查找成功,返回x在表中的序号,否则返回0
    后置条件:表不变

Insert
 前置条件:表已存在
 输入:插入i;待插x
 功能:在表的第i个位置处插入一个新元素x
 输出:若插入不成功,抛出异常
    后置条件:若插入成功,表中增加一个新元素
Delete
 前置条件:表已存在
 输入:删除位置i
 功能:删除表中的第i个元素
    输出:若删除成功,返回被删元素,否则抛出异常
    后置条件:若删除成功,表中减少一个元素
Empty
    前置条件:表已存在
    输入:无
    功能:判断表是否为空
    输出:若是空表,返回1,否则返回0
    后置条件:表不变
ADT
第2节

线性表的顺序结构及其实现

线性表的存储结构————顺序表

顺序表是一种随机存取的存储结构

顺序表的实现

顺序表类的声明

const int MaxSize=100; 
template <class DataType>                    //模板类
class SeqList
{
 public: 
     SeqList( ) ;                                     //构造函数
     SeqList(DataType a[ ], int n);      
     ~SeqList( ) ;                                 //析构函数
     int Length( );                               //线性表的长度
     DataType Get(int i);                   // 按查找,查找表中第i个元素
     int Locate(DataType x );           //按查找,线性表中查找值为x的元素序号
     void Insert(int i, DataType x);  //插入操作,在线性表的第i个元素插入值为x的元素
     DataType Delete(int i);           //删除操作,删除线性表的第i个元素
 private:
     DataType data[MaxSize];    //存放数据元素的数组
     int length;                           //线性表的长度
};

(具体算法见课本25-19页)

例:template <class DataType> 
void SeqList<DataType>::Insert(int i, DataType x)
{
      if (length >= MaxSize) throw "上溢";     //判断是否表满
      if (i < 1 || i > length + 1) throw "位置";  //判断位置插入是否合理
      for (j = length; j >= i; j--)                      //最后一个元素至第i个元素分别后移1位
           data[j] = data[j-1];                         //将元素x填到位置i处
      data[i-1] = x;                                     //将元素x填入i处
      length++;                                         //表长加1
}

第三节
线性表的链接结构及其实现

线性表的链接存储结构————单链表
存储思想:用一组任意的存储单元存放线性表的元素

存储特点:
1.逻辑次序和物理次序
    不一定相同。
2.元素之间的逻辑关系
    用指针表示

 

data:存储数据元素
next:存储指向后继结点的地址

头结点:在单链表的第一个元素结点之前附设一个类型相同的结点,以便空表和非空表处理统一。

单链表类的声明

template <class DataType>
class LinkList
{  
public:
     LinkList( );
     LinkList(DataType a[ ], int n);
     ~LinkList( );
     int Length( );         
     DataType Get(int i);          
     int Locate(DataType x);      
     void Insert(int i, DataType x);  
     DataType Delete(int i);       
     void PrintList( );          
private:
     Node<DataType> *first;
};

具体算法31-40页

template <class DataType> 
DataType LinkList<DataType> :: Delete(int i)
{
     p = first ; count = 0;            //工作指针初始化,累加器count初始化
     while (p != NULL && count < i - 1)//查找第i-1个节点
     {
         p = p->next;
         count++;
     }
     if (p == NULL || p->next == NULL)  throw "位置";
     else {
         q = p->next; x = q->data;  //暂存被删节点      
         p->next = q->next;          //摘链    
         delete q;

 return x;
     }
}
双链表:在单链表的每个结点中再设置一个指向其前驱结点的指针域。
顺序列表和链表的比较

 1线性表需频繁查找却很少进行插入和删除操作,或其操作和元素在表中的位置密切相关时,宜采用顺序表作为存储结构;线性表需频繁插入和删除时,则宜采用链表做存储结构。
2线性表中元素个数变化较大或者未知时,最好使用链表实现;而如果用户事先知道线性表的大致长度,使用顺序表的空间效率会更高。

第四节

线性表的其他存储方式

1.静态链表

2.间接寻址

 

 

 

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值