zoukankan      html  css  js  c++  java
  • 数据结构——队列和栈

    1. 简介

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除(出队)操作,而在表的后端(rear)进行插入(入队)操作。

    栈又名堆栈,它和队列一样也是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。与先进先出队列相比,栈的运作模式是后进先出。

    2.具体实现

    栈和链表属于线性表,意味着它可以基于数组和链表来实现,它们和普通线性表相比只是在增加和删除元素时只能在首尾操作,我们只用提供push和pop接口,实现起来十分简单。

    关于数组链表,有不明白的同学可以看我前面写的博文。

    在这里我们使用原生列表来实现,实际上使用我们前面实现的动态数组和链表也是完全没有问题的。

    Python:

    class Stack:
        def __init__(self,*args):
            self.data = []
    
        def push(self,item):
            self.data.append(item)
    
        def pop(self):
            item = self.data.pop()
            return item
    
    class Queue:
        def __init__(self,*args):
            self.data = []
    
        def push(self,item):
            self.data.append(item)
    
        def pop(self):
            item = self.data.pop(0)
            return item

    C#:

    class Queue<T>
    {
        private List<T> data;
        public Queue()
        {
            data = new List<T>();
        }
    
        public void push(T item)
        {
            data.Add(item);
        }
    
        public T pop()
        {
            T res = data[0];
            data.RemoveAt(0);
            return res;
        }
    }
    
    class Stack<T>
    {
        private List<T> data;
        public Stack()
        {
            data = new List<T>();
        }
    
        public void push(T item)
        {
            data.Add(item);
        }
    
        public T pop()
        {
            T res = data[data.Count - 1];
            data.RemoveAt(data.Count - 1);
            return res;
        }
    }

    3. 队列和栈的更多形式

    队列除了先进先出外,也有循环队列、后进先出队列和优先队列。

    循环队列一般基于循环数组,它可以节省增删元素时不必要的空间和时间浪费。

    后进先出队列其实就和栈实现方式一样,从这个角度来看栈无疑也是队列的一种。

    优先队列则是实现了根据入队时的权重,出队永远是队列中权重最大的那个元素,优先队列可以基于最大堆来实现,在数据结构这系列博文的后续,我也会专门再写一篇最大最小堆的博文。

  • 相关阅读:
    SQL Server--用户自定义函数
    Session: 防止用户多次登陆
    创建零时表、表变量
    利用SQL语句查询一个数据库中的所有表
    Distinct和Group by去除重复字段记录
    sql server存儲過程語法
    SQL数据库的基本语句
    删除表数据drop、truncate和delete的用法
    linux/unix 基本概念的认识(sha-bang 、PPA)
    linux/unix 基本概念的认识(sha-bang 、PPA)
  • 原文地址:https://www.cnblogs.com/lazyfish007/p/11835817.html
Copyright © 2011-2022 走看看