首页 > 代码库 > careercup-栈与队列 3.1
careercup-栈与队列 3.1
3.1 描述如何只用一个数组来实现三个栈。
解答
我们可以很容易地用一个数组来实现一个栈,压栈就往数组里插入值,栈顶指针加1; 出栈就直接将栈顶指针减1;取栈顶值就把栈顶指针指向的单元的值返回; 判断是否为空就直接看栈顶指针是否为-1。
如果要在一个数组里实现3个栈,可以将该数组分为3个部分。如果我们并不知道哪个栈将装 入更多的数据,就直接将这个数组平均分为3个部分,每个部分维护一个栈顶指针, 根据具体是对哪个栈进行操作,用栈顶指针去加上相应的偏移量即可。
C++实现代码:
#include<iostream>#include<new>using namespace std;class stack3{private: int top[3];//仅仅用来记录偏移量 int size; int *buf;public: stack3(int size=300) { buf=new int[3*size]; this->size=size; top[0]=top[1]=top[2]=-1; }
~stack3()
{
delete []buf;
} void push(int stackNum,int val) { top[stackNum]++; int idx=top[stackNum]+stackNum*size; buf[idx]=val; } void pop(int stackNum) { top[stackNum]--; } int gettop(int stackNum) { int idx=top[stackNum]+stackNum*size; return buf[idx]; } bool empty(int stackNum) { return top[stackNum]==-1; }};int main(){ stack3 mystack;//stack3 mystack; for(int i=0; i<10; ++i) mystack.push(0, i); for(int i=10; i<20; ++i) mystack.push(1, i); for(int i=100; i<110; ++i) mystack.push(2, i); for(int i=0; i<3; ++i) cout<<mystack.gettop(i)<<" "; cout<<endl; for(int i=0; i<3; ++i) { mystack.pop(i); cout<<mystack.gettop(i)<<" "; } mystack.push(0, 111); mystack.push(1, 222); mystack.push(2, 333); for(int i=0; i<3; ++i) cout<<mystack.gettop(i)<<" "; return 0;}
careercup-栈与队列 3.1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。