顺序表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版)的更多相关文章

  1. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  2. hrbust-1545-基础数据结构——顺序表(2)

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) ...

  3. 北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

  4. 【数据结构与算法Python版学习笔记】引言

    学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...

  5. 数据结构与算法Python版 熟悉哈希表,了解Python字典底层实现

    Hash Table 散列表(hash table)也被称为哈希表,它是一种根据键(key)来存储值(value)的特殊线性结构. 常用于迅速的无序单点查找,其查找速度可达到常数级别的O(1). 散列 ...

  6. python算法与数据结构-顺序表(37)

    1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...

  7. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  8. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  9. 数据结构---顺序表(C++)

    顺序表 是用一段地址连续的存储单元依次存储线性表的数据元素. 通常用一维数组来实现 基本操作: 初始化 销毁 求长 按位查找 按值查找 插入元素 删除位置i的元素 判空操作 遍历操作 示例代码: // ...

  10. 数据结构顺序表Java实现

    Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...

随机推荐

  1. 共享文件夹:The user has not been granted the requested logon type at this computer

    场景重现 今天做一个项目测试,要用到虚拟机,于是在虚拟机(XP 32)上新建了一个共享的文件夹.然后我在Win7 机器上访问它得到如下的error 消息:

  2. InstallShield2013 error 6109

    InstallShield在没添加打包文件时是可以编译生成安装包的,在增加打包文件之后就报以下错误: ISEXP : error : -6109: Internal build error ISEXP ...

  3. CentOS6编译安装PHP7+Nginx

    本文属于动手搭建PHP开发环境的一部分,更多点击链接查看. 本文以centos6为例. 安装PHP 下载 http://cn2.php.net/distributions/php-5.6.22.tar ...

  4. fir.im Weekly - TouchBar 从入门到开发

    自从 Macbook Pro 发布重大更新, TouchBar 一直是开发者的重点关注对象.除了NSTouchBar官方文档,速度快者如 @毫无存在感的Cee,分享了一篇 NSTouchBar 的入门 ...

  5. kafka 安装出现的几个问题

    1.安装kafka的过程出现两个问题 1)错误: 找不到或无法加载主类 kafka.Kafka 原因:    下载的是源码包,需要编译.可以下载Binary downloads: 2) ERROR I ...

  6. 创建分区表和查看分区表的Metadata

    未分区的表,只能存储在一个FileGroup中:对table进行分区后,每一个分区都存储在一个FileGroup中.表分区是将逻辑上一个完整的表,按照特定的字段拆分成Partition set,分散到 ...

  7. SQL Server 2014新特性探秘(2)-SSD Buffer Pool Extension

    简介     SQL Server 2014中另一个非常好的功能是,可以将SSD虚拟成内存的一部分,来供SQL Server数据页缓冲区使用.通过使用SSD来扩展Buffer-Pool,可以使得大量随 ...

  8. Matlab 循环读入和输出

    这两天要给导师做实验,因此要写Matlab程序,在做程序的时候,涉及到了循环读入和输出,查找相关资料 代码如下 : Image=['F:\\SYTP\\',num2str(i),'.jpg']; Te ...

  9. C指针(二)

    原文链接:http://www.orlion.ga/924/ 一.指针与const限定符 const限定符与指针结合起来常见的情况有一下几种: const int *a; int const *a; ...

  10. 关于SubSonic3.0插件更新字符串过长引发的System.Data.SqlClient.SqlException的异常修复

    最近公司客服提交了个BUG,说是更新产品详细信息时,有的可以有的更新不了,前段时间一直没空所以暂时放下,刚才又出现这个问题,所以马上处理了一下. 打开项目解决方案,进入DEBUG模式,拿到操作的数据提 ...