Python实现线性数据结构-线性表、栈、队列

线性数据结构:数据项之间具有一对一的线性关系,除了第一个和最后一个数据项之外,每个数据项都有且仅有一个前驱和一个后继。

复制代码
1.线性表:由有穷个元素组成,由一块连续内存顺序地存储在表中的元素。 也称为顺序表或连续表。可增删改查
2.栈:有序集合LIFO(后进先出)结构。添加、移除新项在顶部。 创建、添加、删除、判断是否为空、返回栈item数量
3.队列:有序集合FIFO(先进先出)结构。队尾添加,队首移除,。 创建、添加、删除、判断是否为空、返回栈item数量
python 复制代码
from collections import deque

def linear_list():
    # Python的内置列表(list)本质上就是一个线性表
    list = [1,2,3,4,5]
    print(list[0])
    list.append(6)
    list.remove(3)
    list[1] = 10
    print(list)

linear_list()



class Stack:
    # Python没有内置的栈,使用列表实现效果
    def __init__(self):
        self.items = []

    def is_empty(self):
        # 长度=0返回True, 否则返回false
        return len(self.items) == 0
    def push(self,item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            # pop() 移除并返回最后一个元素
            return self.items.pop()
        else:
            raise IndexError('pop from empty stack')

    def peek(self):
        if not self.is_empty():
            # 访问最后一个元素
            return self.items[-1]
        else:
            raise IndexError('peek from empty stack')

    def size(self):
        return len(self.items)

stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.is_empty())
print(stack.pop())
print(stack.peek())


class Queue:
    # Python collections.deque是一个双端队列
    def __init__(self):
        self.items = deque()

    def is_empty(self):
        # 长度=0返回True, 否则返回false
        return len(self.items) == 0

    def enqueue(self,item):
        self.items.append(item)

    def dequeue(self):
        if not self.is_empty():
            # pop() 移除并返回队首元素
            return self.items.popleft()
        else:
            raise IndexError('dequeue from empty queue')

    def size(self):
        return len(self.items)

queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
print(queue.is_empty())
print(queue.dequeue())
print(queue.size())

执行结果:

1

1, 10, 4, 5, 6

False

3

2

False

1

2

相关推荐
西西学代码2 分钟前
Flutter---回调函数
开发语言·javascript·flutter
大尚来也13 分钟前
深入HashMap底层:从JDK1.7到1.8的架构演进与性能突围
开发语言
minji...22 分钟前
Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending
linux·运维·服务器·网络·数据结构·c++·算法
罗湖老棍子39 分钟前
最大数(信息学奥赛一本通- P1549)(洛谷-P1198)
数据结构·算法·线段树·单点修改 区间求最大值
千寻girling1 小时前
面试官 : “ 说一下 Python 中的常用的 字符串和数组 的 方法有哪些 ? ”
人工智能·后端·python
森林里的程序猿猿1 小时前
并发设计模式
java·开发语言·jvm
222you1 小时前
四个主要的函数式接口
java·开发语言
第一程序员1 小时前
Python基础学习路径:非科班转码者的入门指南
python·github
u0136863822 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
smchaopiao2 小时前
Python中字典与列表合并的问题与解决方法
开发语言·python