小白学数据结构——一、线性结构(栈和队列)
来源:互联网 发布:手机如何清除数据 编辑:程序博客网 时间:2024/06/03 12:55
栈和队列
定义
- 存放数据的线性表
- 操作:入栈/队列,出栈/队列,判断满/空
- 空间复杂度O(n)
- 单次操作时间复杂度:O(1)
- 区别:
- 栈:先进后出
- 队列:先进先出
实现
- 数组和链表都可以
- 指针(辅助变量)
- 栈顶/底指针
- 队头/尾指针
- 关键:出入元素的同时移动指针
详细实现代码请查看 http://blog.csdn.net/wtfmonking/article/details/16989159
(1) 栈
栈又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。
- 顺序栈
- 链式栈
栈的python实现代码
class stack(): def __init__(self): self.stack = [] def empty(self): return self.stack==[] def push(self,data): self.stack.append(data) def pop(self): if self.empty(): return None; else: return self.stack.pop(-1) def top(self): if self.empty(): return None else: return self.stack[-1] def length(self): return len(self.stack)
(2)队列
队列也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入(队尾),在表的另一端进行删除(队首)。
图片展示的很详细,为了区分队空和队满,我们采取少用一个元素空间,约定以“对头指针在队尾指针的下一位置(指环状的下一位置)上”作为队列满状态的标志。
队列的Python实现
class queue(): def __init__(self): self.queue = [] def empty(self): return self.queue == [] def enqueue(self,data): self.queue.append(data) def dequeue(self): if self.empty(): return None else: return self.queue.pop(0) def head(self): if self.empty(): return None else: return self.queue[0] def length(self): return len(self.queue)
应用:括号的匹配检测
- 括号、引号等符号必须是成对出现的
- 设计算法实现自动检测输入的字符串中的括号是否匹配
- 比如:
- {}(){}{}[({})]
# -*- coding: utf-8 -*-"""Created on Wed Nov 8 11:00:28 2017@author: liang"""def detection(array): list_array=[] #存放数据的栈 #删除无关符符号 temp=list(array) for i in temp: if i is '(' or i is ')' or i is '{' or i is '}' or i is '[' or i is ']': print('输入符合规范') else: temp.remove(i) print('删除不符合规范字符:',i) #进行括号检测 array_re=temp for i in array_re: list_array.append(i) if i is '}' and len(list_array) !=0 and list_array[-1]=='{': list_array.pop() print('pop',i) if i is ')' and len(list_array) !=0 and list_array[-1]=='(': list_array.pop() print('pop',i) if i is ']' and len(list_array) !=0 and list_array[-1]=='[': list_array.pop() print('pop',i) if len(list_array)==0: print('匹配成功') else: print('匹配失败')detection(')()))')
阅读全文
0 0
- 小白学数据结构——一、线性结构(栈和队列)
- [数据结构]线性结构——队列
- [数据结构]线性结构——队列
- 小白学数据结构——一、线性结构(数组&链表)
- 数据结构(一) 线性表、栈和队列
- 【数据结构】数据结构与算法(一)——线性结构
- 数据结构全攻略--线性结构不攻自破之栈和队列
- 数据结构-线性结构-队列
- 数据结构——线性结构(4)——顺序队列与循环队列的原理
- 线性结构(队列和栈)
- 【数据结构】线性结构:栈&队列&数组
- 数据结构——线性结构(5)——顺序队列的实现
- 数据结构——线性结构(6)——链队列的原理
- 数据结构——线性结构(7)——链队列的实现
- 【数据结构】——-栈、队列和数组(一)
- 数据结构读书笔记(一)——表、栈和队列
- 数据结构-线性结构之队列
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)
- Mac下安装Elasticsearch极简指南
- 自定义一个月份选择器插件
- Linux的入门学习(二)
- MarkDown的一些快捷键
- git管理gitee从入门
- 小白学数据结构——一、线性结构(栈和队列)
- php结合redis实现高并发下的抢购、秒杀功能
- PTA-地下迷宫探索(DFS,水题)
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第五章 搜索与回溯算法
- SpringMVC+Mybatis集成记录
- SVG在iFrame下自适应完美解决跨域问题
- 插入排序和希尔排序
- File
- Android 5.0屏幕录制漏洞(CVE-2015-3878)威胁预警