Fork me on GitHub

Python实现顺序表


  1 '''
  2     定义一个顺序表
  3     max:顺序表的默认长度为10
  4     num:顺序表中的元素个数
  5 '''
  6 # 定义一个顺序表
  7 class sequence:
  8     def __init__(self, max=10):
  9         self.max = max
 10         self.data = [None] * self.max
 11         self.num = 0
 12 
 13     # 统计顺序表元素数量
 14     def count(self):
 15         return self.num
 16 
 17     # 判断顺序表是否为空
 18     def isEmpty(self):
 19         return self.num == 0
 20 
 21     # 判断顺序表空间是否存满
 22     def isFull(self):
 23         return self.num == self.max
 24 
 25     '''
 26         从顺序表添加元素
 27     '''
 28 
 29     # 头插法
 30     def add(self, value):
 31         for j in range(self.num, 0, -1):
 32             self.data[j] = self.data[j - 1]
 33         self.data[0] = value
 34         self.num += 1
 35 
 36     # 尾插法
 37     def append(self, value):
 38         self.data[self.num] = value
 39         self.num += 1
 40 
 41     # 从指定位置插入元素
 42     def insert(self, index, value):
 43         if index < 1:
 44             self.add(value)
 45         if index > self.num + 1:
 46             self.append(value)
 47         for j in range(self.num, index - 1, -1):
 48             self.data[j] = self.data[j - 1]
 49         self.data[index - 1] = value
 50         self.num += 1
 51 
 52     # 判断某元素是否存在于顺序表中
 53     def isExist(self, value):
 54         for j in range(self.num):
 55             if self.data[j] == value:
 56                 return True
 57             else:
 58                 return False
 59 
 60     # 查询某元素的位置
 61     def __index__(self, value):
 62         if self.isExist(value):
 63             for j in range(self.num):
 64                 if self.data[j] == value:
 65                     return j
 66                 else:
 67                     return -1
 68         else:
 69             return "该元素不存在"
 70 
 71     # 根据索引查询对应的元素
 72     def __getitem__(self, index):
 73         if not isinstance(index, int):
 74             raise TypeError
 75         if 0 <= index < self.num:
 76             return self.data[index - 1]
 77         else:
 78             raise IndexError
 79 
 80     # 根据索引修改顺序表的元素
 81     def __setitem__(self, index, value):
 82         if not isinstance(index, int):
 83             raise TypeError
 84         if 0 <= index < self.num:
 85             self.data[index - 1] = value
 86         else:
 87             raise IndexError
 88 
 89     # 从顺序表中删除元素
 90     # 根据索引删除元素
 91     def __delete__(self, index):
 92         if not isinstance(index, int):
 93             raise TypeError
 94         if index < 0 or index > self.num:
 95             raise IndexError
 96         for j in range(index - 1, self.num):
 97             if j == self.num - 1:
 98                 self.data[j] = None
 99             else:
100                 self.data[j] = self.data[j + 1]
101         self.num -= 1
102 
103     # 直接删除元素
104     def __delitem__(self, value):
105         for i in range(self.num):
106             if self.data[i] == value:
107                 self.__delete__(i+1)
108                 return
109     # 遍历顺序表
110     def show(self):
111         print('<', end=' ')
112         for i in range(0, self.num):
113             # if i !=self.num-1:
114             print(self.data[i], end=' ')
115         print('>')
116 
117 
118 if __name__ == '__main__':
119     s = sequence()
120     s.add(13)
121     s.add(43)
122     s.add(90)
123     s.show()
124     s.append(21)
125     s.append(22)
126     s.append(43)
127     s.show()
128     s.insert(2, 67)
129     print('目前顺序表中元素个数:%d' % s.count())
130     s.show()
131     print('判断元素90是否在顺序表中:', s.isExist(90))
132     print('查看顺序表中第三个元素是%d' % s.__getitem__(3))
133     print('修改顺序表中第四个元素的值')
134     s.__setitem__(4, 78)
135     s.show()
136     print('删除第一个元素')
137     s.__delete__(1)
138     s.show()
139     print('删除元素21')
140     s.__delitem__(21)
141     s.show()

 


 

posted @ 2022-02-13 17:34  wangkx  阅读(387)  评论(0编辑  收藏  举报