Python中顺序表的实现简单代码分享


Posted in Python onJanuary 09, 2018

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

结果展示:

Python中顺序表的实现简单代码分享

代码示例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class SeqList(object):
 def __init__(self, max=8):
  self.max = max  #创建默认为8
  self.num = 0
  self.date = [None] * self.max
  #list()会默认创建八个元素大小的列表,num=0,并有链接关系
  #用list实现list有些荒谬,全当练习
  #self.last = len(self.date)
  #当列表满时,扩建的方式省略
 def is_empty(self):
  return self.num is 0

 def is_full(self):
  return self.num is self.max

 #获取某个位置的元素
 def __getitem__(self, key):
  if not isinstance(key, int):
   raise TypeError
  if 0<= key < self.num:
   return self.date[key]
  else:
   #表为空或者索引超出范围都会引发索引错误
   raise IndexError

 #设置某个位置的元素
 def __setitem__(self, key, value):
  if not isinstance(key, int):
   raise TypeError
  #只能访问列表里已有的元素,self.num=0时,一个都不能访问,self.num=1时,只能访问0
  if 0<= key < self.num:
   self.date[key] = value #该位置无元素会发生错误
  else:
   raise IndexError

 def clear(self):
  self.__init__()

 def count(self):
  return self.num

 def __len__(self):
  return self.num

 #加入元素的方法 append()和insert()
 def append(self,value):
  if self.is_full():
   #等下扩建列表
   print("list is full")
   return
  else:
   self.date[self.num] = value
   self.num += 1

 def insert(self,key,value):
  if not isinstance(key, int):
   raise TypeError
  if key<0: #暂时不考虑负数索引
   raise IndexError
  #当key大于元素个数时,默认尾部插入
  if key>=self.num:
   self.append(value)
  else:
   #移动key后的元素
   for i in range(self.num, key, -1):
    self.date[i] = self.date[i-1]
   #赋值
   self.date[key] = value
   self.num += 1

 #删除元素的操作
 def pop(self,key=-1):
  if not isinstance(key, int):
   raise TypeError
  if self.num-1 < 0:
   raise IndexError("pop from empty list")
  elif key == -1:
   #原来的数还在,但列表不识别他
   self.num -= 1
  else:
   for i in range(key,self.num-1):
    self.date[i] = self.date[i+1]
   self.num -= 1

 def index(self,value,start=0):
  for i in range(start, self.num):
   if self.date[i] == value:
    return i
  #没找到
  raise ValueError("%d is not in the list" % value)

 #列表反转
 def reverse(self):
  i,j = 0, self.num - 1
  while i<j:
   self.date[i], self.date[j] = self.date[j], self.date[i]
   i,j = i+1, j-1

if __name__=="__main__":
 a = SeqList()
 print(a.date)
 #num == 0
 print(a.is_empty())
 a.append(0)
 a.append(1)
 a.append(2)
 print(a.date)
 print(a.num)
 print(a.max)
 a.insert(1,6)
 print(a.date)
 a[1] = 5
 print(a.date)
 print(a.count())

 print("返回值为2(第一次出现)的索引:", a.index(2, 1))
 print("====")
 t = 1
 if t:
  a.pop(1)
  print(a.date)
  print(a.num)
 else:
  a.pop()
  print(a.date)
  print(a.num)
 print("========")
 print(len(a))

 a.reverse()
 print(a.date)
 """
 print(a.is_full())
 a.clear()
 print(a.date)
 print(a.count())
 """

有关于Python数据结构中顺序表的实现,大家也可以参考本站的另一篇文章Python数据结构之顺序表的实现代码示例,当中有对顺序表略微详细的介绍。小编对此知识点理解不够透彻,以后还会继续研究的。

以上就是本文关于Python中顺序表的实现简单代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
从零学python系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
浅谈Python基础之I/O模型
May 11 Python
Python命令行解析模块详解
Feb 01 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
python如何通过实例方法名字调用方法
Mar 21 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
Oct 31 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python创建子类的方法分析
Nov 28 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
python中set()函数简介及实例解析
Jan 09 #Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 #Python
深入了解Python中pop和remove的使用方法
Jan 09 #Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 #Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 #Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 #Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 #Python
You might like
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
php链式操作的实现方式分析
2019/08/12 PHP
JS日历 推荐
2006/12/03 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
微信小程序入门教程
2016/11/18 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
2014年幼儿园元旦活动方案
2014/02/13 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年妇女工作总结
2015/05/14 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA