数据结构(三)

线性表及其理论实现

  • 什么是线性表
    ​ “线性表”:由同类型数据元素构成有序序列的线性结构
  1. 表中元素个数称为线性表的长度
  2. 线性表没有元素时,称为空表
  3. 表起始位置称为表头,表结束位置称表尾

方法1:顺序存储结构直接表示

例如: f ( x ) = 4 x 5 − 3 x 2 + 1 f(x) = 4x^5-3x^2+1 f(x)=4x53x2+1
表示成:
在这里插入图片描述
这样两个多项式相加就变成两个数组对应分量相加.
缺点: 过于稀疏,存在浪费, 假如有 x 2000 x^{2000} x2000还得有2000那么大的数组, 那么一个改进的思路就是能不能只保留非零项.

方法2:顺序存储结构表示非零项

每个非零项 a i x i a_ix^i aixi涉及两个信息:系数 a i a_i ai和指数 i i i
可以将一个多项式看成是一个 ( a i a_i ai, i i i) 二元组的集合。可以用结构数组来表示.

  • 结构数组是对某个对象,不同属性的数据,用一组数据来表示,称为结构数组。结构数组中的元素可以是数值也可以是字符串。
    在这里插入图片描述

在这里插入图片描述
按指数大小有序存储, 因为这样运算方便, 举上面两个多项式加法的例子:

在这里插入图片描述
指数项相比较, 然后大的排前面, 指数相同的系数相加.

方法3:链表结构存储非零项

  • python链表的定义
  • 链表中每个结点存储多项式中的一个非零项,包括系数和指数两个数据域以及一个指针域
    关于__slots__详细的解释
class Node():
  __slots__=['_item','_next']  #限定Node实例的属性
  def __init__(self,item):
    self._item=item
    self._next=None   #Node的指针部分默认指向None
  def getItem(self):
    return self._item
  def getNext(self):
    return self._next
  def setItem(self,newitem):
    self._item=newitem
  def setNext(self,newnext):
    self._next=newnext

在这里插入图片描述
在这里插入图片描述

广义表与多重链表

  • 我们知道了一元多项式的表示,那么二元多项式又该如何表示?
    比如,给定二元多项式:
    在这里插入图片描述

  • 方法一: 可以将上述二元多项式看成关于x 的一元多项式
    在这里插入图片描述
    在这里插入图片描述
    上面广义表(Generalized List)是线性表的推广, 属于多重链表中的一种.

多重链表

  • 链表中结点可能同时隶属于多个链;
  • 多重链表中结点指针域会有多个,如前面例子包含了Next和SubList两个指针域;但包含两个指针域的链表不一定是多重链表,比如双向链表不是多重链表。
    -多重链表有广泛的用途,基本上如树、图这样相对复杂的数据结构都可以采用多重链表的方式实现存储。

猜你喜欢

转载自blog.csdn.net/landing_guy_/article/details/120703817