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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM