欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法与数据结构 -- 栈与队列(三)

程序员文章站 2022-06-07 08:20:56
...

栈与队列定义了数据的操作

一、栈

栈是一种先入先出的数据结构。可以用顺序表实现,也可以用链表实现
算法与数据结构 -- 栈与队列(三)

栈操作

  1. 判断是否为空
  2. 压栈、入栈push
  3. 出栈 pop
  4. 返回栈顶元素 peek
  5. 栈的元素个数
# coding:utf-8
'''
用python中的列表实现栈
栈是后入先出
在这里,将列表的尾部看成活动的
入栈和出栈都在列表尾部实现
列表尾部也是栈顶
'''
class Stack():
    def __init__(self):
        self.__list = []
    def is_empty(self):
        '''
        判断栈是否为空
        :return:
        '''
        return self.__list==[]

    def push(self,item):
        '''
        入栈.
        :param item:压入元素
        :return:
        '''
        self.__list.append(item)
    def pop(self):
        '''
        出栈
        :return: 列表弹出的栈顶元素
        '''
        if self.is_empty():
            print('栈已空')
        else:
            return self.__list.pop()
    def peek(self):
        '''
        读取栈顶元素,不改变原列表
        :return: 栈顶元素
        '''
        return self.__list[-1]

二、队列

用python中的列表实现队列
队列是先入先出
在这里,在列表的头部出列,列表尾部入列.这里的定义的方向也可以反过来
队列操作

  1. 栈的元素个数
  2. 判断是否为空
  3. 入列
  4. 出列
  5. 列表长度
class Queue():
    def __init__(self):
        self.__list = []

    def is_empty(self):
        '''
        判断栈是否为空
        :return:
        '''
        return self.__list==[]
    def en_queue(self,item):
        '''
        入列
        :param item:
        :return:
        '''
        self.__list.append(item)
    def de_queue(self):
        '''
        出列
        :return:列表头部数据
        '''
        if self.is_empty():
            print('队列已空')
        else:
            return self.__list.pop(0)
    def size(self):
        '''
        :return:栈里面元素个数
        '''
        return len(self.__list)

三、双向队列

用python中的列表实现双向队列
双向队列两端均可进列、出列
在这里,将列表的头部看成队列的头部,列表尾看成队列的尾部.这里的定义的方向也可以反过来
双向队列操作

  1. 判断是否为空
  2. 头部入列
  3. 尾部入列
  4. 头部出列
  5. 尾部出列
  6. 列表长度
class Queue():
    def __init__(self):
        self.__list = []

    def is_empty(self):
        '''
        判断栈是否为空
        :return:
        '''
        return self.__list==[]
    def en_front(self,item):
        '''
        头部入列
        :param item:
        :return:
        '''
        self.__list.insert(0,item)
    def en_rear(self,item):
        '''
        尾部入列
        :param item:
        :return:
        '''
        self.__list.append(item)
    def de_front(self):
        '''
        头部出列
        :return:列表头部数据
        '''
        if self.is_empty():
            print('队列已空')
        else:
            return self.__list.pop(0)
    def de_rear(self):
        '''
        尾部部出列
        :return:列表尾部数据
        '''
        if self.is_empty():
            print('队列已空')
        else:
            return self.__list.pop()
    def size(self):
        '''
        :return:栈里面元素个数
        '''
        return len(self.__list)