数据结构:顺序表(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     """

 

posted @ 2016-11-24 15:51  小黄人python  阅读(4182)  评论(0编辑  收藏  举报