1.线性表的定义和特点
线性表是数据结构中最基本的一种数据类型,它是由n个具有相同类型的数据元素(结点)组成的有限序列。线性表的定义和特点如下:
-
定义:线性表是n个数据元素的有限序列,每个数据元素都和它的前驱元素和后继元素(除了第一个和最后一个元素)一一对应。
-
特点:
- 有序性:线性表中的元素是有序的,每个元素都有一个确定的位置。
- 有限性:线性表中的元素个数是有限的,有一个确定的长度。
- 同类型性:线性表中的元素类型相同,即都是相同的数据类型。
- 可变性:线性表的长度是可变的,可以在任意位置插入或删除元素。
线性表可以用数组或链表等数据结构来实现。常见的线性表有数组、链表、栈、队列等。
2.案例引入
a·一元多项式的运算
要求:实现两个一元多项式的相加,相减,相乘的运算。
分析:(实现两个多项式香菇干运算的前提是如何在计算机中有效表示一元多项式)
一元多项式可以有n+1个系数唯一确定,因此可以将一元多项式pn(x)抽象为一个由n+1个元素组成的有序序列,可用一个线性表P来表示:P=(p0,p1,p2,...,pn),pn(x)=p0+p1x+p2x^2+...+pnx^n
假设Qm(x)是一元m次多项式,同样也可用线性表Q表示Q=(q0,q1,q2....,qm)
不失一般性,设m<=n,则两个多项式相加的结果Rn(x)=Pn(x)+Qm(x)可用线性表R表示
R=(p0+q0,p1+q1,p2+q2,...,pm+qm,pm+1,...,pn)
在后面的叙述中奖看到,对此类多项式的线性表只需要用数组表示的顺序存储结构便很容易实现上述运算。
然而在通常的应用中,多项式的次数可能很高且变化很大,这种所谓的稀疏多项式如果采用上述表示方法,将使得线性表中出现很多0元素。下面给出稀疏多项式的例子,
b·稀疏多项式的运算
稀疏多项式是一种特殊的一元多项式,其中只有少量项的系数非零,其他项的系数都为零。通过使用线性表来表示稀疏多项式,可以节省空间。例如,考虑稀疏多项式:P(x) = 2x^4 - 5x^2 + 3x + 2。该稀疏多项式可以表示为线性表的元素:[(2, 4), (-5, 2), (3, 1), (2, 0)]。相比于一元多项式,稀疏多项式的线性表中省略了系数为零的项。
综合a,b案例,思考:
由上述讨论可以看出,如果多项式属于非稀疏多项式,且只对多项式进行“求值”等不改变多项式的系数和指数的运算,可采用数组表示的顺序存储结构。如果多项式属于稀疏多项式,虽然可以采用数组表示法,但这种顺序存储结构的存储空间分配不够灵活。因为事先无法确定多项式的非零项数,所以需要根据预期估计可能的最大值定义数组的大小,这种分配方式可能会带来
两种问题:一种是实际非零项数比较小,浪费了大量存储空间;另一一种是实际非零项式超过了最不大值,存储空间不够。另外在实现多项式的相加运算时,还需要开辟一个新的数组保存结果多项类式,导致算法的空间复杂度较高。改进方案是利用链式存储结构表示多项式的有序序列,这样灵
活性更大些。
c·图书管理系统
出版社有一些图 书数据保存在一一个文本文件bok.xtu中,为简单起见,在此假设每种图书只包括三部分信息: ISBN (书号)、书名和价格,文件中的部分数据如图2.1所示。现要求实现一个图书信息管理系统,包括以下6个具体功能。
(1)查找:根据指定的ISBN或书名在找相应图书的有关信息,并返回该图书在表中的位置序号。
(2)插人:插人一种新的图书信息。
(3)删除:删除-一种图书信息。
(4)修改:根据指定的ISBN,修改该图书的价格。
(5)排序:将图书按照价格由低到高进行排序。
(6)计数:统计图书表中的图书数量。
要实现上述功能,与以上案例中的多项式一样,我们
首先根据图书表的特点将其抽象成一个线性表, 每本图书
作为线性表中的一个元素,然后可以采用适当的存储结构
来表示该线性表,在此基础上设计完成有关的功能算法。
具体采取哪种存储结构,可以根据两种不同存储结构的优
缺点,视实际情况而定。
可以看出,在工作和生活中的许多实际应用问题都会
步及图书信息管理中用到的这些基本操作。这些问题中都
卫含由n个数据特性相同的元素,即可以表示为线性表。
同的问题所涉元素的数据类型不尽相同,可以为简单数
类型(如a所示的一元多项式表示),也可以为复杂数据类型(如案例b所示的稀疏项式表示和案例3中的图书数据),但这些问题所涉的基本操作都具有很大的相似性,如果每个具体应用都编-一个程序显然不是一 一种很好的方法。解决这类问题的最好方法就是从具体用中抽象出共性的逻辑结构和基本操作(即抽象数据类型),然后采用程序设计语言实现租应存储结构和基本操作。