浅谈栈、队列
所谓栈和队列其本质都是一种存储信息的方法,最主要的差别就是两者的存取方式不同,栈相当于是一个一端开口一端封闭的空心玻璃柱,每存入一个数据就是扔进一个与管口等粗的球,取出数据时只能取最上头的,也就是最后一个放进去的,并且当管中无球时,无法取数据;相对而言,队列相当于是一个两端开口的空心玻璃柱,每存入一个数据,就从后端插入一个与管口等粗的球,取数据时只能从前端取不能从后段取,同样当其中无球时无法取。
从上述介绍中可以发现两者各有优势,但队列有一个显著问题,但插入取出次数多时,可能仅有几个数据但存储却达到几百个位置,因此我们考虑到在已知同时存储的数据不多的时候,可以用环形的数组进行存储。
进出栈代码如下:
void ruzhan(int x) // 入栈时传入入栈数据 { zhan[tot]=x; tot=tot+1; } void chuzhan(int x) // 出栈时传入出栈几个 { for(int i=0;i<x;i++) { zhan[tot-1]=0; tot=tot-1; } } 全局变量:
zhan[] // 指存栈用的数组 tot // 用于表示当前存储的位置
进出队列代码如下:
void rudulie(int x) // 入队列时传入入队列数据 { duilie[end]=x; end=end+1; } void chuduilie(int x) // 出队列时传入出队列几个 { for(int i=0;i<x;i++) { duilie[begin]=0; begin=begin+1; } } 全局变量: duilie[] // 指存队列用的数组 begin // 用于表示当前存储的开头位置 end // 用于表示当前存储的结束位置
环状队列代码如下:
void rudulie(int x) // 入队列时传入入队列数据 { duilie[end]=x; end=end+1; if(end>=max) { end=end-max; } } void chuduilie(int x) // 出队列时传入出队列几个 { for(int i=0;i<x;i++) { duilie[begin]=0; begin=begin+1; } if(begin>=max) { begin=begin-max; } } 全局变量: duilie[] // 指存队列用的数组 begin // 用于表示当前存储的开头位置 end // 用于表示当前存储的结束位置 max // 用于表示数组的总格数
感谢各位观看我的博客,希望能对大家有所帮助。