Python数据结构实验 顺序表的实现

一、实验目的

1.掌握用Python定义线性表的顺序存储类型;

2.掌握用Python调试顺序表的基本方法;

3.掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现; 

二、实验环境

1.Windows操作系统的计算机

2.Python3.7环境平台和PyCharm编辑器

三、实验说明

1.实现线性表顺序存储结构的基本操作。
2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。

3.自主编写程序,必要时参考相关资料。

4.实验学时:2学时

四、实验内容和步骤

1.实验内容

(1)  有一个递增有序的整数顺序表L,设计一个算法将整数x插入适当位置,以保持该表的有序性,并给出算法的时间和空间复杂度。例如,L=(1,3,5,7),插入x=6后L=(1,3,5,6,7).

(2) 有一个整数顺序表L,设计一个尽可能高效的算法删除其中所有值为负整数的元素(假设L中值为负整数的元素可能有多个),删除后元素的相对次序不改变,并给出算法的时间和空间复杂度。例如L=(1,2,-1,-2, 3,-3),删除后L=(1,2,3)。

2.实验步骤

(1)分析实验内容,写出程序大致框架或完整的程序代码。

(2)进入Python集成环境。

(3)编辑程序并进行保存。

(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。

(5)检查程序输出结果。

五、实验代码与结果(程序运行代码及其结果)

1.

import time

class SqList:



    def __init__(self,capacity=0):

        self.capacity=capacity  # 最大容量

        self.data=[None]*self.capacity  # 用于存储数据

        self.size=0    # 元素个数计数(线性表有效长度)



    def getsize(self):  # 获取顺序表长度

        return self.size



    def CreateSqlist(self,a):   # 创建顺序表

        for i in range(0,len(a)):

            if self.size==self.capacity:

                self.resize(2*self.size);

            self.data[self.size]=a[i]

            self.size+=1

    def display(self):  # 打印顺序表

        for i in range(0,self.size):

            print(self.data[i],end=' ')

        print()



    def resize(self,newcapacity):    # 修改线性表的最大容量

        if newcapacity>=self.capacity:

            self.data=self.data+[None]*(newcapacity-self.capacity)

        else:

            self.data=self.data[:newcapacity]

        self.capacity=newcapacity





    def Add(self,e):

        if self.size==self.capacity:

            self.resize(2*self.size)

        self.data[self.size]=e

        self.size+=1



    def  getitem(self,i):   # 求顺序表中序号为i的元素

        return self.data[i]



    def setitem(self,i,x):  #设置顺序表中序号为i的元素

        self.data[i]=x



    def GetNo(self,e):  #求顺序表中第一个值为e的元素的逻辑序号

        i=0;

        while i<self.size and self.data[i]!=e:

            i+=1

        if (i>=self.size):

            return -1;

        else:

            return i;



    def Inserrt(self,i,e):  #在顺序表中插入e作为第i个元素

        assert 0<=i<=self.size

        if self.size==self.capacity:

            self.resize(2*self.size)

        for j in range(self.size,i-1,-1):

            self.data[j]=self.data[j-1]

        self.data[i]=e

        self.size+=1



    def Delete(self,i):

        for j in range(i,self.size-1):

            self.data[j]=self.data[j+1]

        self.size-=1



    def insert_sorted_list(L, x):

        low, high = 0, len(L) - 1

        while low <= high:

            mid = (low + high) // 2

            if L[mid] == x:

                L.insert(mid, x)

                return

            elif x < L[mid]:

                high = mid - 1

            else:

                low = mid + 1

        L.insert(low, x)



if __name__ =='__main__':

    L = [1, 3, 5, 7]

    start = time.time()

    SqList.insert_sorted_list(L, 6)

    end = time.time()

    print("排序后的列表:", L)

    print('运行时间:', end - start)


#因为插入函数 insert_sorted_list() 没有定义在 class SqList 中,而是定义在类外部。你需要将该函数定义在 class SqList 中,或者在调用时加上类名前缀,如 SqList.insert_sorted_list(L, 6)。
 


2.
 

class SqList:



    def __init__(self,capacity=0):

        self.capacity=capacity  # 最大容量

        self.data=[None]*self.capacity  # 用于存储数据

        self.size=0    # 元素个数计数(线性表有效长度)



    def getsize(self):  # 获取顺序表长度

        return self.size



    def CreateSqlist(self,a):   # 创建顺序表

        for i in range(0,len(a)):

            if self.size==self.capacity:

                self.resize(2*self.size);

            self.data[self.size]=a[i]

            self.size+=1

    def display(self):  # 打印顺序表

        for i in range(0,self.size):

            print(self.data[i],end=' ')

        print()



    def resize(self,newcapacity):    # 修改线性表的最大容量

        if newcapacity>=self.capacity:

            self.data=self.data+[None]*(newcapacity-self.capacity)

        else:

            self.data=self.data[:newcapacity]

        self.capacity=newcapacity





    def Add(self,e):

        if self.size==self.capacity:

            self.resize(2*self.size)

        self.data[self.size]=e

        self.size+=1



    def  getitem(self,i):   # 求顺序表中序号为i的元素

        return self.data[i]



    def setitem(self,i,x):  #设置顺序表中序号为i的元素

        self.data[i]=x



    def GetNo(self,e):  #求顺序表中第一个值为e的元素的逻辑序号

        i=0;

        while i<self.size and self.data[i]!=e:

            i+=1

        if (i>=self.size):

            return -1;

        else:

            return i;



    def Inserrt(self,i,e):  #在顺序表中插入e作为第i个元素

        assert 0<=i<=self.size

        if self.size==self.capacity:

            self.resize(2*self.size)

        for j in range(self.size,i-1,-1):

            self.data[j]=self.data[j-1]

        self.data[i]=e

        self.size+=1



    def Delete(self,i):

        for j in range(i,self.size-1):

            self.data[j]=self.data[j+1]

        self.size-=1



    def insert_sorted_list(L, x):

        low, high = 0, len(L) - 1

        while low <= high:

            mid = (low + high) // 2

            if L[mid] == x:

                L.insert(mid, x)

                return

            elif x < L[mid]:

                high = mid - 1

            else:

                low = mid + 1

        L.insert(low, x)



    def remove_negative_numbers(L):

        i, j = 0, 0

        n = len(L)

        while i < n:

            if L[i] >= 0: # 数值非负,保留在列表中,并移动指针i

                L[j] = L[i]

                j += 1

            i += 1

        del L[j:]  # 删除末尾的负整数元素

        return L





if __name__ =='__main__':

    L = [1,2,-1,-2, 3,-3]

    SqList.remove_negative_numbers(L)

    print("运行结果:", L)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/471321.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

首页效果炫酷的wordpress免费主题模板

视频背景免费WP主题 简洁大气的视频背景wordpress主题&#xff0c;找大视频背景的主题可以看看这个。 https://www.wpniu.com/themes/193.html 红色全屏大图WP主题 非常经典的一款免费wordpress主题&#xff0c;红色全屏大图满足多行业使用。 https://www.wpniu.com/themes…

sqli-labs训练平台靶场详解!!!!

sqli-labs 是一个专业的 SQL 注入练习平台,该平台包含常见的注入类型,环境共有65个 SOL 注入漏洞&#xff0c;旨在帮助Web安全学习者对SQL注入漏洞有一个全面的了解。 项目地址为:GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based…

JAVA多线程之同步

文章目录 1. wait/notify1.1 基本使用1.2 优化使用 2. Park & Unpark2.1 基本使用2.2 基本原理 3. 线程状态4. 活跃性4.1 死锁4.1.1 死锁介绍4.2.2 死锁定位 4.3 活锁4.4 饥饿 锁的使用&#xff0c;其实就是为了使用临界资源的时候来进行同步&#xff0c;即一个线程用完一个…

【哈希表】算法例题

目录 五、哈希表 39. 赎金信 ① 40. 同构字符串 ① 41. 单词规律 ① 42. 有效的字母异位词 ① 43. 字母异位词分组 ② 44. 两数之和 ① 45. 快乐数 ① 46. 存在重复元素 ① 47. 最长连续序列 ② 五、哈希表 39. 赎金信 ① 给你两个字符串&#xff1a;ransomNote 和 m…

MySQL中replace into详解、批量更新、不存在插入存在则更新、replace into的坑

文章目录 一、replace into原理二、replace into的三种形式三、replace into 使用案例3.1、replace into values3.1.1、只有主键且主键冲突3.1.2、有主键有唯一索引且主键冲突3.1.3、有主键有唯一索引且唯一索引冲突(有坑)3.1.4、有主键有唯一索引且与一条主键冲突与另一条唯一…

阿里云2核4g服务器支持多少人同时在线?意想不到

阿里云2核4G服务器支持多少人在线&#xff1f;阿里云服务器网账号下的2核4G服务器支持20人同时在线访问&#xff0c;然而应用不同、类型不同、程序效率不同实际并发数也不同&#xff0c;搭建网站的话支持日均2000IP访问。 阿里云2核4G服务器多少钱一年&#xff1f;2核4G5M带宽…

【Linux更新驱动、cuda和cuda toolkit】

目录 1. 更新显卡驱动1.1. 查看当前显卡驱动版本1.2. 删除原始显卡驱动1.3. 删除CUDA Toolkit1.4. 在NVIDIA官网找到2080Ti对应的最新驱动程序 2. 更新CUDA Toolkit2.1. 下载CUDA Toolkit2.2. 安装.run2.3. 添加环境变量2.4. 检查是否安装好了 最近需要更新服务器的显卡驱动和C…

AI助手 - 月之暗面 Kimi.ai

前言 这是 AI工具专栏 下的第四篇&#xff0c;这一篇所介绍的AI&#xff0c;也许是截至今天&#xff08;204-03-19&#xff09;国内可访问的实用性最强的一款。 今年年初&#xff0c;一直看到有人推荐 Kimi&#xff0c;不过面对雨后春笋般的各类品质的AI&#xff0c;说实话也有…

YOLOv9改进策略:卷积魔改 | AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; YOLOv9如何魔改卷积进一步提升检测精度&#xff1f;AKConv 通过不规则卷积运算完成高效特征提取的过程&#xff0c;为卷积采样形状带来更多探索选择。 AKConv可以作为即插即用的卷积运算来替代卷积运算来提高…

修复打印机不能打印的10种方法,总有一种适合你

前言 技术有时很奇怪,我们可以用声音控制恒温器,但有时打印机会像15年前一样令人困惑和不可靠。如果打印机向你抛出错误(或完全忽略你的要求),可能有许多原因。 不幸的是,仅仅找出问题才成功一半,另一半是解决方案,它将使你的打印机重新工作。下面是如何解决问题的方…

Mysql:行锁,间隙锁,next-key锁?

注&#xff1a;以下讨论基于InnoDB引擎。 文章目录 问题引入猜想1&#xff1a;只加了一行写锁&#xff0c;锁住要修改的这一行。语义问题数据一致性问题 猜想2&#xff1a;要修改的这一行加写锁&#xff0c;扫描过程中遇到其它行加读锁猜想3&#xff1a;要修改的这一行加写锁&…

STM32 CubeMx创建Lwip+FreeRtos时出现ping不通的问题

STM32 CubeMx创建LwipFreeRtos时出现ping不通 1、配置ETH&#xff0c;使用中断 2、配置Lwip&#xff08;使用静态ip&#xff09;&#xff0c;其余什么都不用管 3、配置FreeRtos&#xff08;选择V2版本&#xff09;&#xff0c;其余什么都不用管 4、创建代码 5、查看自动生…

python爬虫之xpath入门

文章目录 一、前言参考文档&#xff1a; 二、xpath语法-基础语法常用路径表达式举例说明 三、xpath语法-谓语表达式举例注意 四、xpath语法-通配符语法实例 五、选取多个路径实例 六、Xpath Helper安装使用说明例子&#xff1a; 七、python中 xpath 的使用安装xpath 的依赖包xm…

2024年 信息系统管理工程师(中级)

2024年信息系统管理工程师全套视频、历年真题及解析、历年真题视频解析、教材、模拟题、重点笔记等资料 1、2023、2022、2021、2020年全套教程精讲视频。 2、信息系统管理工程师历年真题及解析&#xff08;综合知识、案例分析&#xff09;、历年真题视频解析。 3、官方最新信…

有实际意义的伦敦金交易策略参考

一谈起有实际意义的伦敦金交易策略参考&#xff0c;很多人以为是讨论的是什么飞天遁地的技术&#xff0c;其实这些都是没有实际意义。对普通投资者来说&#xff0c;什么才是有实际意义的呢&#xff1f;那就是生存。要讨论实际有意义的伦敦金交易策略参考&#xff0c;就是投资者…

【赠书第21期】游戏力:竞技游戏设计实战教程

文章目录 前言 1 竞技游戏设计的核心要素 1.1 游戏机制 1.2 角色与技能 1.3 地图与环境 2 竞技游戏设计的策略与方法 2.1 以玩家为中心 2.2 不断迭代与优化 2.3 营造竞技氛围与社区文化 3 实战案例分析 4 结语 5 推荐图书 6 粉丝福利 前言 在数字化时代的浪潮中&…

ARM实验 LED流水灯

.text .global _start _start: 使能GPIOE GPIOF的外设时钟 RCC_MP_AHB4ENSETR的第[4][5]设置为1即可使能GPIOE GPIOF时钟 LDR R0,0X50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第4位设置为1 S…

蓝桥杯需要掌握的几个案例(C/C++)

文章目录 蓝桥杯C/C组的重点主要包括以下几个方面&#xff1a;以下是一些在蓝桥杯C/C组比赛中可能会涉及到的重要案例类型&#xff1a;1. **排序算法案例**&#xff1a;2. **查找算法案例**&#xff1a;3. **数据结构案例**&#xff1a;4. **动态规划案例**&#xff1a;5. **图…

30天拿下Rust之错误处理

概述 在软件开发领域&#xff0c;对错误的妥善处理是保证程序稳定性和健壮性的重要环节。Rust作为一种系统级编程语言&#xff0c;以其对内存安全和所有权的独特设计而著称&#xff0c;其错误处理机制同样体现了Rust的严谨与实用。在Rust中&#xff0c;错误处理通常分为两大类&…

有没有好的视频素材网站官网?高清无水印素材下载

在这个数字化的时代&#xff0c;找到优质的素材对于创作者来说就像寻找一片绿洲一样重要。无论是个人项目还是专业作品&#xff0c;好的素材能够为作品增色不少。以下是我精选的一些素材网站&#xff0c;它们各具特色&#xff0c;提供从图片、视频到音效等多种素材&#xff0c;…