实验一、线性表顺序存储的实现及应用

一、实验目的

1.掌握线性表的顺序存储结构的表示和实现方法。

2.掌握顺序表基本操作的算法实现。

3.掌握顺序表的应用。

二、实验环境

Thonny

三、实验内容

编写一个程序,实现顺序表的各种基本运算(假设顺序表的元素类型为 char), 并在此基础上设计一个主程序完成如下功能:

(1)初始化顺序表 L;

(2)依次采用尾插法插入 a、b、c、d、e 元素;

(3)输出顺序表 L;

(4)输出顺序表 L 的长度;

(5)判断顺序表 L 是否为空;

(6)输出顺序表 L 的第 3 个元素;

(7)输出元素 a 的位置

(8)在第 4 个元素位置上插入 f 元素

(9)输出顺序表 L;

(10)删除 L 的第 3 个元素;

(11)输出顺序表 L;

(12)释放顺序表 L。

四、实验要求

1、用pycharm工具创建文件或程序,输入代码后,进行编译运行。

2、观看程序运行结果,并根据结果进行思考,对程序进行修改和总结。

【核心算法提示】

1.顺序表插入操作的基本步骤:要在顺序表中第 i 个数据元素之前插入一个数据元素 x,首先要判断插入位置 i 是否合法,假设线性表的长为 n,则 i 的合法值范围: 0≤i≤n,若是合法位置,就再判断顺序表否满,如果满,则增加空间并插入数据元素x,如果不满,则将第 i 个数据元素及其之后的所有数据元素都后移一个位置,此时第 i 个位置已经腾空,再将待插入的数据元素 x 插入到该位置上,最后将线性表的长增加 1。

2.顺序表删除操作的基本步骤:要删除顺序表中第 i 个数据元素,首先仍然要判断 i 的合法性, i 的合法范围是 0≤i≤n,若是合法位置,则将第 i 个数据元素之后的所有数据都前移一个位置,最将线性表长减1。

3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素 则可以采用顺序查找的方法,从表中第 1 个数据元素开始依次将值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回 0 值。

五、实验源代码

class SqList:       #顺序表类
  def __init__(self):    #构造方法
    self.initcapacity=5;         #初始容量设置为5
    self.capacity=self.initcapacity #容量设置为初始容量
    self.data=[None]*self.capacity #设置顺序表的空间
    self.size=0      #长度设置为0
       #线性表的基本运算算法
  def resize(self, newcapacity):   #改变顺序表的容量为newcapacity
    assert newcapacity>=0   #检测参数正确性的断言
    olddata=self.data
    self.data=[None]*newcapacity
    self.capacity=newcapacity
    for i in range(self.size):
      self.data[i]=olddata[i]
  def CreateList(self, a): #由数组a中元素整体建立顺序表
    for i in range(0,len(a)):
      if self.size==self.capacity:
         self.resize(2*self.size); 
      self.data[self.size]=a[i]
      self.size+=1         
  def Add(self, e): #在线性表的末尾添加一个元素e
    if self.size==self.capacity:  
       self.resize(2*self.size)
    self.data[self.size]=e  
    self.size+=1
  def display(self): #输出线性表
    for i in range(0,self.size):
      print(self.data[i],end='  ')
    print()
  def getsize(self): #求线性表长度
    return self.size
  def __getitem__(self): #求序号为i的元素
      print("请输入要查找的元素的序号:")
      i=int(input())
      assert 0<=i<self.size
      return self.data[i]
  def Insert(self): #在线性表中序号i位置插入元素e
      print('请分别输入要插入的位置和元素')
      i=int(input())
      e=str(input())
      assert 0<=i<=self.size
      if self.size==self.capacity:
          self.resize(2*self.size)
          for j in range(self.size,i-1,-1):
              self.data[j]=self.data[j-1]
              self.data[i]=e
              self.size+=1
  def Delete(self): #在线性表中删除序号i的元素
    print('请输入要删除的元素的序号')
    i=int(input())
    assert 0<=i<=self.size-1
    for j in range(i,self.size-1):
      self.data[j]=self.data[j+1] 
    self.size-=1                      
    if self.capacity>self.initcapacity and self.size<=self.capacity/4:
     self.resize(self.capacity//2)
  def GetNo(self): #查找第一个为e的元素的序号
    i=0;
    print('请在下面输入要查找的元素并按回车查找')
    e=str(input())
    while i<self.size and self.data[i]!=e:
        i+=1
    if(i>=self.size):
        return -1;
    else:
        return i;
  def DestorySequenceList(self): #释放顺序表
      self.__init__()
if __name__ == '__main__':
  L=SqList()
  L.Add('a'),L.Add('b'),L.Add('c'),L.Add('d'),L.Add('e')
  print("L: ",end=''),L.display()
  print("size=%d"%(L.getsize()))
  if L.getsize()==0:
   print("顺序表为空")
  else:
   print("顺序表不为空")
  print("你要查找的元素为:%s"%(L.__getitem__()))
  print("你要查找的元素位置在第%d个"%(L.GetNo()))
  L.Insert()
  print("插入后为: ",end=''),L.display()
  L.Delete()
  print("删除后为: ",end=''),L.display()
  L.DestorySequenceList()
  print("释放顺序表后为:",end=''),L.display()

六、实验运行截图

以上内容仅个人见解与看法,如有错误请批评指正。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值