1. 程式人生 > >題目:棧的表示和實現(建立棧,push,pop)

題目:棧的表示和實現(建立棧,push,pop)

#include<iostream>

using namespace std;

#define STACK_INIT_SIZE 100  //儲存空間初始分配量

#define STACINEREMENT 10     //儲存空間分配增量

#define ERROR 0

#define OK 1

class Stack{

private:

       int*top;   //棧頂指標

       int*base;  //棧底指標

       intstacksize;  //棧的當前可使用的最大容量

public:

       friendStack InitStack();  //初始化

       friendint Push(Stack &s); //把資料壓入棧內

       friendint GetTop(Stack &s);  //取出棧頂元素(棧中元素沒有減少)

       friendint Pop(Stack &s);   //彈出棧頂元素(棧中元素已減少一個)

};

StackInitStack(){

       Stacks;

       s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));

       s.top=s.base;

       s.stacksize=STACK_INIT_SIZE;

       returns;

}

int Push(Stack &s){

       intn,e;

       if(s.top-s.base>=s.stacksize){

              s.base=(int*)realloc(s.base,(s.stacksize+STACINEREMENT)*sizeof(int));

              if(!s.base)return ERROR;

              s.top=s.base+s.stacksize;

              s.stacksize+=STACINEREMENT;

       }

       cout<<"請輸入你需要元素的個數: ";  cin>>n;

       s.stacksize=n;

       cout<<"請輸入你需要的"<<n<<"個元素: ";

       for(intj=0;j<s.stacksize;j++){

              cin>>e;

              *s.top++=e;

       }

       cout<<"剛建立的棧內的元素為(從棧底至棧頂輸出):";

       int*p=s.base;

       for(inti=0;i<s.stacksize;i++){      

              cout<<*p<<"  ";

              p++;

       }

       cout<<endl<<endl;

       returnOK;

}

int GetTop(Stack &s){

       if(s.top==s.base)return ERROR;

       inte=*(s.top-1);

       cout<<"棧頂元素為:";cout<<e<<endl<<endl;

       returnOK;

}

int Pop(Stack &s){

       if(s.top==s.base)return ERROR;

       inte=*(--s.top);

       cout<<"彈出的棧頂元素為:";cout<<e<<endl;;

       s.stacksize--;

       cout<<"新的棧內的元素為(從棧底至棧頂輸出):";

       int*p=s.base;

       for(inti=0;i<s.stacksize;i++){      

              cout<<*p<<"  ";

              p++;

       }

       cout<<endl<<endl;

       returnOK;

}

int main(){

       StackS;

       S=InitStack();

       Push(S);

       GetTop(S);

       Pop(S);

       return0;

}