数据结构和算法-数据结构-线性结构-栈和队列

 ##################################################

"""
三、线性结构
(1)栈
1、定义:栈是一个数据集合,可以理解为只能在一端进行插入或者删除操作的列表。

2、栈的特点:后进先出(last-in,first-out),简称LTFO表
这种数据结构的特点:
就是像是杯子或者是弹夹,电梯,
存储的时候从底部开始,读取的时候从顶部开始,具备这种特点就是栈
就是后进先出,

存储的时候就可以从顺序表或者链表就可以实现,
只让从一端去存储,和读取,就实现了栈,

3、栈的概念:

栈顶:允许插入和删除的这一端称之为栈顶
栈底:另一固定的一端称为栈底
空栈:不含任何元素的栈称为空栈
4、栈的基本操作:

进栈(压栈):push
出栈:pop
取栈顶:gettop

5、栈的Python实现
不需要自己定义,使用列表结构即可。
进栈函数:append
出栈函数:pop
查看栈顶元素:li[-1]

"""

##################     python使用list实现栈        #######################

#############################################
# 栈的实现
# 使用list实现

class Stack(object):
    """栈"""

    def __init__(self):
        self.__list = []  # 私有的,不允许外部操作,使用list作为容器,

    def is_empty(self):
        """判断是否为空"""
        return self.__list == []  # 这是返回一个判断,如果是一个空列表就是返回true,否则就是false,

    def push(self, item):
        """加入元素"""
        self.__list.append(item)  # 选择在尾部添加,尾部添加效率高,

    def pop(self):
        """弹出元素"""
        return self.__list.pop()

    def peek(self):
        """返回栈顶元素"""
        if self.__list:  # 做一个判断如果不是空列表返回数据,空列表返回none
            return self.__list[-1]
        else:
            return None

    def size(self):
        """返回栈的大小"""
        return len(self.__list)

if __name__ == "__main__":
    stack = Stack()
    stack.push("hello")
    stack.push("world")
    stack.push("itcast")
    print(stack.size())
    print(stack.peek())
    print(stack.pop())
    print(stack.pop())
    print(stack.pop())

 ##################################################

"""

(2)队列

1、介绍

队列是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除,
进行插入的一端称为队尾(rear),插入动作称之为进队或入队
进行删除的一端称之为对头(front),删除动作称为出队
双向队列:对列的两端都允许进行进队和出队操作

2、队列的实现

队列能否简单用列表实现?为什么?
初步设想:列表+两个下标指针
创建一个列表和两个变量,front变量指向队首,rear变量指向队尾。初始时,front和rear都为0。
进队操作:元素写到li[rear]的位置,rear自增1。
出队操作:返回li[front]的元素,front自减1。

"""

##################     python使用list实现队列       #######################

# 队列的实现
# 取值的一端是队头,存入值的是队尾,

class Queue(object):
    """队列"""

    def __init__(self):
        self.__list = []

    def is_empty(self):
        return self.__list == []

    def enqueue(self, item):
        """进队列"""
        self.__list.insert(0, item)

    def dequeue(self):
        """出队列"""
        return self.__list.pop()

    def size(self):
        """返回大小"""
        return len(self.__list)

if __name__ == "__main__":
    q = Queue()
    q.enqueue("hello")
    q.enqueue("world")
    q.enqueue("itcast")
    print(q.size())
    print(q.dequeue())
    print(q.dequeue())
    print(q.dequeue())

##################     python会用list实现双端队列       #######################

# 双端队列,

class Deque(object):
    """双端队列"""

    def __init__(self):
        self.__list = []

    def is_empty(self):
        """判断队列是否为空"""
        return self.__list == []

    def add_front(self, item):
        """在队头添加元素"""
        self.__list.insert(0, item)

    def add_rear(self, item):
        """在队尾添加元素"""
        self.__list.append(item)

    def pop_front(self):
        """从队头删除元素"""
        return self.__list.pop(0)

    def pop_rear(self):
        """从队尾删除元素"""
        return self.__list.pop()

    def size(self):
        """返回队列大小"""
        return len(self.__list)

if __name__ == "__main__":
    deque = Deque()
    deque.add_front(1)
    deque.add_front(2)
    deque.add_rear(3)
    deque.add_rear(4)
    print(deque.size())
    print(deque.pop_front())
    print(deque.pop_front())
    print(deque.pop_rear())
    print(deque.pop_rear())

##########################################

##########################################

原文地址:https://www.cnblogs.com/andy0816/p/12348237.html

时间: 2024-08-01 08:35:15

数据结构和算法-数据结构-线性结构-栈和队列的相关文章

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性

线性结构——栈和队列

栈类 1 public class MyStack<T> { 2 //栈的大小 3 private int size; 4 //存放栈的数组 5 private Object[] data; 6 7 /** 8 * 无参构造方法,初始化数组大小 9 */ 10 public MyStack() { 11 size = -1; 12 data = new Object[10]; 13 } 14 15 /** 16 * 有参构造方法,自定义数组大小 17 */ 18 public MyStack(

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

算法数据结构01 /算法数据结构概述

目录 算法数据结构01 /算法数据结构概述 1. 算法 2. 评判程序优劣的方法 3. 时间复杂度 4. 数据结构 5. python数据结构性能分析 6. 总结 算法数据结构01 /算法数据结构概述 1. 算法 算法概述 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用. 算法是独立存在的一种解决问题的方法和思想. 对于算法而言,实

图解堆算法、链表、栈与队列(Mark)

原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小.但很重要的作业,同样应当拥有优先权.而堆就是为了解决此类问题而设计的数据结构.--

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

【算法和数据结构】_17_小算法_线性结构:顺序表

/* 本程序用来测试数据结构中的线性结构:顺序表 */ #include <stdio.h> #include <stdlib.h> #define LINEAR_MAX_SIZE 64 struct LinearList { int* List; //顺序表指针 unsigned short int ListLen; //顺序表最大的元素个数 unsigned short int CurrentLen; //顺序表当前元素的个数 }; typedef struct LinearL

数据结构第二讲:线性结构

参考:浙大数据结构(陈越.何钦铭)课件 1.线性表及其实现 有一个很好的问题可以方便的说明引入链表的好处,那就是一元多项式:f(x) = a0 + a1x + an-1xn-1 + anxn 的表示及运算(两个多项式相加/相减/相乘等),显然我们可以利用数组来解决这个问题,两个多项式相加就是两个数组对应分量相加.但是这引入了一个很严重的问题,如何表示多项式x + 3x2000呢?开这么大的数组明显会造成空间浪费. 解决上面遗留的问题的一个方法是用结构数组按指数大小有序存储,每一个数组元素维护两个