題目:棧的表示和實現(建立棧,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;
}