基於陣列實現雙端棧

2022-09-12 01:06:29 字數 2780 閱讀 6786

棧底分別在陣列的兩端,規定陣列大小為128,int型別。

可以實現的操作為驗空、驗滿、分別向兩個棧新增元素、分別刪除棧頂元素、分別展示棧內所有元素。

**如下:

#include

using namespace std;

typedef int stackelement;

const int stack_capacity = 128;

class stack

public:

stack();

int size1()const;

int size2()const;

bool empty1()const;

bool empty2()const;

bool full()const;

void push1(const stackelement & item);

void push2(const stackelement & item);

void display1();

void display2();

void pop1();

void pop2();

int capacity()const;

stackelement top1()const;

stackelement top2()const;

private:

stackelement myarray[stack_capacity];

int mytop1;

int mytop2;

stack::stack():mytop1(-1),mytop2(-1)

bool stack::empty1()const

return (mytop1==-1);

bool stack::empty2()const

return (mytop2==-1);

int stack::size1()const

return mytop1;

int stack::size2()const

return mytop2;

int stack::capacity()const

return stack_capacity;

void stack::push1(const stackelement & item)

if(mytop1+mytop2>=capacity()-2)

cerr<<"***full full***"if(mytop1++mytop1;

myarray[mytop1]=item;

else

cerr<<"***error error***"void stack::push2(const stackelement & item)

if(mytop1+mytop2>=capacity()-2)

cerr<<"***full full***"if(mytop2++mytop2;

myarray[stack_capacity-1-mytop2]=item;

else

cerr<<"***error error***"void stack::display1()

for(int i = mytop1;i>=0;i--)

coutfor(int i = mytop2;i>=0;i--)

coutif(!empty1())

mytop1--;

else

cerr<<"***no element no element***"if(!empty2())

mytop2--;

else

cerr<<"***no element no element***"if(!empty1())

return (myarray[mytop1]);

else

cerr<<"***stack is empty -- returning gabage value***"return garbage;

stackelement stack::top2()const

if(!empty2())

return (myarray[stack_capacity-1-mytop2]);

else

cerr<<"***stack is empty -- returning gabage value***"return garbage;

bool stack::full()const

return(capacity()<=mytop1+mytop2+2);

int main()

stack s;

cout<<"two stack created.stack 1 empty?"int numitems1;

cin>>numitems1;

for(int i=1;i<=numitems1;i++)

s.push1(i);

cout<<"please input a number to fill in stack 2  :";

int numitems2;

cin>>numitems2;

for(int i=1;i<=numitems2;i++)

s.push2(i);

cout<<"stack 1 contents : "cout<<"stack 2 contents : "cout<<"stack 1 empty ? "cout<<"delete stack 1 a value,then the top value is : "cout<<"delete stack 2 a value,then the top value is : "<

棧 佇列 雙端佇列的實現

1.棧 class stack object 棧 def init self self.list def push self,item 新增新元素item到棧頂 def pop self 彈出棧頂元素 self.list.pop def peek self 返回棧頂元素 if self.list r...

佇列 , 雙端佇列, 棧

注意 linkedlist中新增或者取出的方法有很多,比如add,offer,offerfirst,offerlast,push.根據使用的資料結構不同,最好區分使用.一,佇列queue fifo first in first out 0,模型上一般為右進左出,右端入隊並稱為隊尾,左端出隊並稱為隊頭...

棧 佇列 雙端佇列

棧 stack 有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,由於棧資料結構只允許在一端進行操作,因而按照後進先出 lifo,last in first out 的原理運作。棧結構實現 棧可以用順序表實現,也可以用鍊錶實現。棧的操作 功能stack 建立乙個新的空棧 push i...