你来啦,我们谈谈人生和理想分享 http://blog.sciencenet.cn/u/iggcas010 机器学习、数据挖掘

博文

数据结构之栈和队列——附Python代码

已有 333 次阅读 2018-6-14 21:46 |系统分类:科研笔记| 数据结构, 队列, Python

 没有代码的说教都是耍流氓!!!


一、栈和队列-Stack and Queue

在C语言中常用的数据结构是有序表。栈和队列两种数据类型是常用的数据结构,对有序表附加一些特殊的限定,就得到栈和队列。栈和队列都是特殊的有序表。本文不考虑复杂的栈和队列,比如多重栈和多重队列,仅是单一的栈和队列。


二、栈

插入、删除都是在表的一端(栈顶top)。

S=(s0,s1,……,sn-1),其中s0是栈底元素,sn-1是栈顶元素。S中的元素顺序进栈,第一次弹出的元素是sn-1,最后插入的元素总是先删除,因而栈是后入先出表,Last-In-First-OutLIFO

Python中的列表是可变空间,我们可以用列表表示栈,原理上说列表可以有很多元素,说实话栈也是如此,那是动态栈,本文只考虑静态栈,即给列表指定长度即可。如果非要是小括号的形式,可tuple

#栈
 
class Stack():
      def __init__(self,capacity):
            self.capacity=capacity
            self.stack=[]
      def push(self,x):
            if len(self.stack)<self.capacity:
                  self.stack.append(x)
                  print(x,'进栈成功!')
            else:
                  print('栈满啦,'+str(x)+' 进不去!')
      def pops(self):
            if len(self.stack)>0:
                  y=self.stack.pop()
                  print(y,'出栈成功!')
            else:
                  print('栈为空啦,出个球啊!')
      def print_stack(self):
            print('现在的栈为',tuple(self.stack))
            if len(self.stack)>0:
                  print('栈顶为',self.stack[-1],'\n栈底为',self.stack[0])
 
capacity=9
stk=Stack(capacity)
for item in range(3,18):
      stk.push(item)
stk.print_stack()
for i in range(capacity):
      stk.pops()

三、队列

队列的插入和删除在表的两端,插入称为入列,删除称为出列。插入端称为队尾rear,删除端称为队头front。最先入列的元素总是最先被删除,队列是先入先出表,First-In-First-Out即FIFO。

#队列
 
class Queue():
      def __init__(self,capacity):
            self.capacity=capacity
            self.queue=[]
      def put(self,x):
            if len(self.queue)<self.capacity:
                  self.queue.append(x)
                  print(x,'入列成功!')
            else:
                  print('队列满啦,'+str(x)+' 进不去!')
      def popq(self):
            if len(self.queue)>0:
                  y=self.queue.pop(0)
                  print(y,'出列成功!')
            else:
                  print('队列为空啦,出个球啊!')
      def print_queue(self):
            print('现在的队列为',tuple(self.queue))
            if len(self.queue)>0:
                  print('队头为',self.queue[0],'\n队尾为',self.queue[-1])
capacity=9
que=Queue(capacity)
for item in range(3,18):
      que.put(item)
que.print_queue()
for i in range(capacity):
      que.popq()

四、区别

注意两者哪个是头,哪个是尾。栈只有栈顶可以插入和删除,队列只在队尾插入、在队头删除。


五、下期预告

该来个回归了吧,线性回归是最简单的,那再加个多项式回归或者逻辑回归。


欢迎持续关注!如有问题交流,可直接回复,也欢迎批评指正!

如果没有账号,可发邮件hipython@outlook.com联系我,并注明文章题目。




http://blog.sciencenet.cn/blog-1966190-1119015.html

上一篇:机器学习之KNN算法及TensorFlow实战
下一篇:机器学习之线性回归附Python代码

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2018-6-21 09:00

Powered by ScienceNet.cn

Copyright © 2007-2017 中国科学报社

返回顶部