数据结构与算法分析(c++版) #2 初涉线性表

 线性表

        线性表的定义:是由称为元素的数据项组成的一种有限且有序的序列。这个定义中有序是指线性表中的每一个元素都有自己的位置。
       线性表不含任何元素时,我们称之为空表(empty list)。当前储存的元素数目成为线性表的长度(length)。线性表的开始结点成为表头(head),结尾结点成为表尾(tail)。表中的元素的值与它的位置之间可以有联系,也可以没有联系,因为线性表可以分为有序线性表和无序线性表。有序线性表元素按照值得递增顺序排列,而无序线性表在元素的值与位置之间就没有特殊的联系。

       书中为了定义当前位置的概念,假设线性表由两个分离部分组成,这两部分被一个“栅栏”分开,这个栅栏与当前位置相对应。(本人把它理解为是迭代器指向的地方)。例如,<20, 23 | 12, 15>这个线性表的四个元素被栅栏分成两部分,左边有两个,右边也有两个。

       下面是线性表的ADT。

template <class Elem> class List
{
	public:
	//  清空线性表 
		virtual void clear() = 0 ;
	//  在线性表的右边部分的表头插入元素,如果线性表满了就返回false,否则返回true 
		virtual bool insert(const Elem &) = 0;
	//  在线性表的右边部分的表尾拼接元素,如果线性表满了就返回false,否则返回true  
		virtual bool append(const Elem &) = 0;
	//  删除线性表的右边部分的表头元素,如果右表为空返回false,否则返回true,并把表头元素的值返回到参数中
		virtual bool remove(Elem &) = 0;
	//  把栅栏的位置放在线性表表头,使左边部分为空 
		virtual void setStart() = 0;
	//  把栅栏的位置放在线性表尾,使右边部分为空
		virtual void setEnd() = 0;
	//  把栅栏的位置向左移动一个单位,如果栅栏已经是表头就不移动
		virtual void prev() = 0; 
	//  把栅栏的位置向右移动一个单位,如果栅栏已经是表尾就不移动
		virtual void next() = 0;
	//  返回左边部分线性表的长度
		virtual int leftLength() const = 0;
	//  返回右边部分线性表的长度
		virtual int rightLength() const = 0;
	//  设置栅栏的位置,如果设置的值小于等于线性表元素的个数,则返回true,否则超范围返回false 
		virtual bool setPos(int pos) = 0;
	//  获取右边线性表第一个元素的值,并返回到参数中,获取成功返回true,否则返回false
		virtual bool getValue(Elem &) const = 0;
	//  打印线性表,可有可无 
		virtual void print() const = 0; 
};

       线性表的实现由两种标准方法——顺序表和链表。接下来就学习一些顺序表和链表的实现,并对比两者的时间和空间效率。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值