zoukankan      html  css  js  c++  java
  • 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现)

      1 #!/usr/bin/env python
      2 # -*- coding:utf-8 -*-
      3 
      4 class SeqList(object):
      5     def __init__(self, max=8):
      6         self.max = max      #创建默认为8
      7         self.num = 0
      8         self.date = [None] * self.max
      9         #list()会默认创建八个元素大小的列表,num=0,并有链接关系
     10         #用list实现list有些荒谬,全当练习
     11         #self.last = len(self.date)
     12         #当列表满时,扩建的方式省略
     13     def is_empty(self):
     14         return self.num is 0
     15 
     16     def is_full(self):
     17         return self.num is self.max
     18 
     19     #获取某个位置的元素
     20     def __getitem__(self, key):
     21         if not isinstance(key, int):
     22             raise TypeError
     23         if 0<= key < self.num:
     24             return self.date[key]
     25         else:
     26             #表为空或者索引超出范围都会引发索引错误
     27             raise IndexError
     28 
     29     #设置某个位置的元素
     30     def __setitem__(self, key, value):
     31         if not isinstance(key, int):
     32             raise TypeError
     33         #只能访问列表里已有的元素,self.num=0时,一个都不能访问,self.num=1时,只能访问0
     34         if 0<= key < self.num:
     35             self.date[key] = value   #该位置无元素会发生错误
     36         else:
     37             raise IndexError
     38 
     39     def clear(self):
     40         self.__init__()
     41 
     42     def count(self):
     43         return self.num
     44 
     45     def __len__(self):
     46         return self.num
     47 
     48     #加入元素的方法 append()和insert()
     49     def append(self,value):
     50         if self.is_full():
     51             #等下扩建列表
     52             print("list is full")
     53             return
     54         else:
     55             self.date[self.num] = value
     56             self.num += 1
     57 
     58     def insert(self,key,value):
     59         if not isinstance(key, int):
     60             raise TypeError
     61         if key<0:  #暂时不考虑负数索引
     62             raise IndexError
     63         #当key大于元素个数时,默认尾部插入
     64         if key>=self.num:
     65             self.append(value)
     66         else:
     67             #移动key后的元素
     68             for i in range(self.num, key, -1):
     69                 self.date[i] = self.date[i-1]
     70             #赋值
     71             self.date[key] = value
     72             self.num += 1
     73 
     74     #删除元素的操作
     75     def pop(self,key=-1):
     76         if not isinstance(key, int):
     77             raise   TypeError
     78         if self.num-1 < 0:
     79             raise IndexError("pop from empty list")
     80         elif key == -1:
     81             #原来的数还在,但列表不识别他
     82             self.num -= 1
     83         else:
     84             for i in range(key,self.num-1):
     85                 self.date[i] = self.date[i+1]
     86             self.num -= 1
     87 
     88     def index(self,value,start=0):
     89         for i in range(start, self.num):
     90             if self.date[i] == value:
     91                 return i
     92         #没找到
     93         raise ValueError("%d is not in the list" % value)
     94 
     95     #列表反转
     96     def reverse(self):
     97         i,j = 0, self.num - 1
     98         while i<j:
     99             self.date[i], self.date[j] = self.date[j], self.date[i]
    100             i,j = i+1, j-1
    101 
    102 if __name__=="__main__":
    103     a = SeqList()
    104     print(a.date)
    105     #num == 0
    106     print(a.is_empty())
    107     a.append(0)
    108     a.append(1)
    109     a.append(2)
    110     print(a.date)
    111     print(a.num)
    112     print(a.max)
    113     a.insert(1,6)
    114     print(a.date)
    115     a[1] = 5
    116     print(a.date)
    117     print(a.count())
    118 
    119     print("返回值为2(第一次出现)的索引:", a.index(2, 1))
    120     print("====")
    121     t = 1
    122     if t:
    123         a.pop(1)
    124         print(a.date)
    125         print(a.num)
    126     else:
    127         a.pop()
    128         print(a.date)
    129         print(a.num)
    130     print("========")
    131     print(len(a))
    132 
    133     a.reverse()
    134     print(a.date)
    135     """
    136     print(a.is_full())
    137     a.clear()
    138     print(a.date)
    139     print(a.count())
    140     """
  • 相关阅读:
    [APIO2018]铁人两项 --- 圆方树
    SPOJ1811 && SPOJ1812
    [BZOJ4627][BeiJing2016]回转寿司(线段树)
    NOIP2018提高组题解
    [BZOJ4340][BJOI2015]隐身术(后缀数组)
    [BZOJ4338][BJOI2015]糖果(扩展Lucas)
    [BZOJ4336][BJOI2015]骑士的旅行(树链剖分+线段树)
    [BZOJ4419][SHOI2013]发微博
    [BZOJ2878][NOI2012]迷失游乐园(环套树DP+概率)
    [BZOJ1791][IOI2008]Island岛屿(环套树DP)
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6098137.html
Copyright © 2011-2022 走看看