博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈 和 队列
阅读量:5768 次
发布时间:2019-06-18

本文共 2508 字,大约阅读时间需要 8 分钟。

1、栈和队列的概述

栈和队列主要用于计算过程中数据的临时保存。如果需要存储的数据项数不能够事先确定,就必须采用更复杂的存储机制和管理,这种存储机制称为缓冲存储或者缓存。栈和队列就是使用最多的缓冲存储结构

栈和队列也是最简单的缓存结构,他们只支持数据项的存储和访问。

栈和队列作为数据结构需要提供几个基本的操作,如:创建,检查空。检查满等

栈是保证元素的后进先出LIFO,队列是元素的先进先出FIFO,对于栈或队列,在任何时候,下一次访问或/和删除的元素都默认地唯一确定。只有新的存入或删除操作才会改变下一次默认访问的元素。

实现栈或队列最简单的技术就是用元素存储的顺序表示他们存储的时间

2、栈的描述及抽象数据类型

栈是一种容器,可存入数据元素、访问元素、删除元素。

栈的定义操作包括:栈的创建、判断栈是否为空、将栈元素亚茹栈中、从栈中弹出元素并将其返回、以及检查栈元素

采用顺序表实现栈时候的问题:1.是采用简单顺序表还是采用动态顺序表?2、如果采用简单的顺序表就会出现栈满的情况,而如果采用动态顺表存储区满时可以更换更大的存储区。单这时又会出现存储区置换策略的问题

为了更清晰的理解使用python的list构建一个栈

class mystock:    def __init__(self):        self._elem = []        def is_empty(self):        if not len(self._elem):            return True        else:            return False        def top(self):        if not len(self._elem):            raise Stockisempty        return self._elem[-1]        def pop(self):        if not len(self._elem):            raise Stockisempty        return self._elem.pop()    def push(self, elem):        self._elem.append(elem)
View Code

3、栈的链接表实现

 链接表的实现的缺点是其会更多的依赖于解释器的存储管理,每个结点的链接开销,以及链接结点在实际计算机内存中随意散布可能带来的操作开销

class LNode:    def __init__(self, elem, next=None):        self._elem = elem        self._next = nextclass Llist:    def __init__(self):        self.head = None    def append(self, elem):        current1 = LNode(elem)        current2 = self.head        if not self.head:            self.head = current1            return self.head._elem        else:            while current2._next != None:                current2 = current2._next            current2._next = current1            return current2._next._elem    def pop(self):        current1 = self.head        if not head:            raise ValueError        else:            while current1._next != None:                current2 = current1                current1 = current1._next            current2._next = Noneclass mystock:    def __init__(self):        self._elem = Llist()        def is_empty(self):        if not self._elem.head:            return True        else:            return False        def top(self, s):        if not self._elem.head:            raise Stockisempty        return self._elem.head._elem        def pop(self):        if not len(self._elem):            raise Stockisempty        return self._elem.pop()    def push(self, elem):        return self._elem.append(elem)s = mystock()print(s.push(1))print(s.push(2))
View Code

 4、栈的应用

栈的两个基本用途,一个是可以很方便的临时保存和取用信息,二是其后进先出的存取性质很重要

简单的应用:括号的匹配问题  以 小括号,中括号,大括号为例(不考虑其他多余的括号)

 

转载于:https://www.cnblogs.com/bianjing/p/10369624.html

你可能感兴趣的文章
Google发布Puppeteer 1.0
查看>>
.NET开源现状
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
AMD改善Linux驱动,支持动态电源管理
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
Oracle 备份与恢复学习笔记(5_1)
查看>>
Oracle 备份与恢复学习笔记(14)
查看>>
分布式配置中心disconf第一部(基本介绍)
查看>>
Scenario 9-Shared Uplink Set with Active/Active uplink,802.3ad(LACP)-Flex-10
查看>>
UML类图中的六种关系
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>