栈的问题
刚学没多久,但是运行不出来,应该怎么改
#include<iostream>
#include<stdbool.h>
using namespace std;
const int MAXSIZE=80;
class Stack{
private:
char *data;
int top,size;
public:
Stack();
Stack(int s);
~Stack();
void push(char ch);//入栈
char pop();//出栈并返回栈顶元素
char getPop();//获得栈顶元素
bool isEmpty();//栈是否为空
bool isFull();//栈是否为满
void setNull();//设置栈栈为空
class Full{};//内部异常类
class Empty{};
void Cleartop();
};
Stack::Stack(){
top=-1;
size=MAXSIZE;
data=new char[MAXSIZE];
//char *data=new char[MAXSIZE];
}
Stack::Stack(int s){
top=-1;
size=s;
data=new char[MAXSIZE];
}
Stack::~Stack(){
delete [] data;
}
void Stack::push(char ch){
// if(isFull()==0)data[++top]=ch;
if(isFull()==1){
throw Full();
}else{
data[++top]=ch;
}
}
char Stack::pop(){
if(isEmpty()==1){
throw Empty();
}else{
return data[top--];
}
}
char Stack::getPop(){
if(isEmpty()==0)return data[top--];
}
bool Stack::isEmpty(){
if(top==-1)return true;
else return false;
}
bool Stack::isFull(){
if(top+1==size)return true;
else return false;
}
void Stack::setNull(){
top=-1;
}
void Stack::Cleartop(){
top--;
}
int main(){
char ch;
Stack st;
while(scanf("%c",&ch)!='#'){
st.push(ch);
if(ch=='<'){
st.Cleartop();
}else if(ch=='@'){
st.setNull();
}
}
}
具体是什么错误?
添加头文件 来包含 scanf 函数声明。
将 std::bool 替换为 bool,因为 bool 是C++中的内置类型,无需包含头文件 <stdbool.h>。
在 getPop 函数中,如果栈为空,没有返回值。您可以添加一个 return 语句,并设置一个默认值来处理这种情况。
【以下回答由 GPT 生成】
#include <iostream>
#include <stdexcept>
using namespace std;
const int MAXSIZE = 80;
class Stack {
private:
char *data;
int top, size;
public:
Stack();
Stack(int s);
~Stack();
void push(char ch);//入栈
char pop();//出栈并返回栈顶元素
char getPop();//获得栈顶元素
bool isEmpty();//栈是否为空
bool isFull();//栈是否为满
void setNull();//设置栈为空
class Full {}; //内部异常类
class Empty {};
void Cleartop();
};
Stack::Stack() {
top = -1;
size = MAXSIZE;
data = new char[size];
}
Stack::Stack(int s) {
top = -1;
size = s;
data = new char[size];
}
Stack::~Stack() {
delete[] data;
}
void Stack::push(char ch) {
if (isFull()) {
throw Full();
}
data[++top] = ch;
}
char Stack::pop() {
if (isEmpty()) {
throw Empty();
}
return data[top--];
}
char Stack::getPop() {
if (isEmpty()) {
throw Empty();
}
return data[top];
}
bool Stack::isEmpty() {
return top == -1;
}
bool Stack::isFull() {
return top == size - 1;
}
void Stack::setNull() {
top = -1;
}
void Stack::Cleartop() {
// Code to clear top of the stack
}
int main() {
// 测试栈代码
Stack stack(10);
stack.push('A');
stack.push('B');
stack.push('C');
cout << "Pop: " << stack.pop() << endl; // 出栈并打印栈顶元素
cout << "Pop: " << stack.pop() << endl;
cout << "Pop: " << stack.pop() << endl;
return 0;
}
【相关推荐】