qq_45790374
qq_45790374
采纳率75%
2019-10-24 10:25

(修改报错的程序)线性表及栈与队列的实现 -- 栈

30
已采纳

1.问题描述:
针对线性表或栈或队列(三者任选一种逻辑结构),按要求完成类(模板)的实现,并使用提供的main函数测试程序。

2.完成时有几种选择:
a.栈的实现。 b. 队列的实现。 c. 线性表的实现。

这里是栈的实现。务必按照提供的代码为基础进行补充。

#include
#include
using namespace std;

#define MAX 100

template
class Stack {
public:
Stack(); //构造函数
bool empty() const ; //判断S是否为空栈
bool full() const; //判断栈S是否为满,
~Stack(); //将栈S清空
int size() const; //求栈S的长度,即栈S中的元素的个数
T & top() const; //返回栈S的栈顶元素
void push( const T &e ); //入栈操作,将数据元素e插入栈S的当前栈顶
T & pop(); //出栈操作,删除栈S的栈顶元素,并返回其值
private:
// 补充
T data[MAX];
int cur;
};

template
Stack::Stack()
{
cur = 0;
}

template
bool Stack::empty() const
{
cur = 0;
}

template
bool Stack::full() const
{
return cur >= MAX;
}

template
Stack::~Stack() {}

template
int Stack::size() const { return cur; }

template
T & Stack::top() const
{
if (cur == 0) throw "stack is empty";
return data[cur - 1];
}

template
void Stack::push( const T &e )
{
if (cur >= MAX) throw "stack is full";
data[cur++] = e;
}

template
T & Stack::pop()
{
if (cur == 0) throw "stack is empty";
return data[--cur];
}

//测试的main函数
int main() {
Stack sc; //stack of char
Stack si; //Stack of int
char ch = ' ';
// 不断输入字符到栈中,=结束
while (ch != '=') {
cin >> ch;
if (ch == 'a')
sc.push('A');
sc.push(ch);
}
cout << "top=" << sc.top() << "size=" << sc.size() << endl;
cout << "pop " << sc.pop() << endl;
while (!sc.empty())
cout << sc.pop()<< " ";
cout << endl;

int x = 1;
// 不断输入int到栈中,0结束
while (x != 0) {
    cin >> x;
    if (x > 10)
        si.push(10000);
    si.push(x);
}
cout << "top=" << si.top() << "size=" << si.size() << endl;
cout << "pop " << si.pop() << endl;
while (!si.empty())
    cout << si.pop()<< "/";
cout << endl;

return 0;

}

这个程序报错
return data[cur - 1];这一行显示错误,怎么修改???

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2年前
    #include<iostream> 
    #include<cstdlib> 
    using namespace std;
    
    #define MAX 100
    
    template <typename T>
    class Stack {
    public:
    Stack(); //构造函数
    bool empty() const ; //判断S是否为空栈
    bool full() const; //判断栈S是否为满,
    ~Stack(); //将栈S清空
    int size() const; //求栈S的长度,即栈S中的元素的个数
    const T & top() const; //返回栈S的栈顶元素
    void push( const T &e ); //入栈操作,将数据元素e插入栈S的当前栈顶
    T & pop(); //出栈操作,删除栈S的栈顶元素,并返回其值
    private:
    // 补充
    T data[MAX];
    int cur;
    };
    
    template <typename T>
    Stack<T>::Stack()
    {
        cur = 0;
    }
    
    template <typename T>
    bool Stack<T>::empty() const
    {
        return cur == 0;
    }
    
    template <typename T>
    bool Stack<T>::full() const
    {
        return cur >= MAX;
    }
    
    template <typename T>
    Stack<T>::~Stack() {}
    
    template <typename T>
    int Stack<T>::size() const { return cur; }
    
    template <typename T>
    const T & Stack<T>::top() const
    {
        if (cur == 0) throw "stack is empty";
        return data[cur - 1];
    }
    
    template <typename T>
    void Stack<T>::push( const T &e )
    {
        if (cur >= MAX) throw "stack is full";
        data[cur++] = e;
    }
    
    template <typename T>
    T & Stack<T>::pop()
    {
        if (cur == 0) throw "stack is empty";
        return data[--cur];
    }
    
    //测试的main函数
    int main() {
    Stack<char> sc; //stack of char
    Stack<int> si; //Stack of int
    char ch = ' ';
    // 不断输入字符到栈中,=结束
    while (ch != '=') {
    cin >> ch;
    if (ch == 'a')
    sc.push('A');
    sc.push(ch);
    }
    cout << "top=" << sc.top() << "size=" << sc.size() << endl;
    cout << "pop " << sc.pop() << endl;
    while (!sc.empty())
    cout << sc.pop()<< " ";
    cout << endl;
    
     int x = 1;
     // 不断输入int到栈中,0结束
    while (x != 0) {
         cin >> x;
         if (x > 10)
             si.push(10000);
         si.push(x);
     }
     cout << "top=" << si.top() << "size=" << si.size() << endl;
     cout << "pop " << si.pop() << endl;
     while (!si.empty())
         cout << si.pop()<< "/";
     cout << endl;
    
     return 0;
    }
    

    abc=
    1 2 3 4 0

    top==size=5
    pop =
    c b a A
    top=0size=5
    pop 0
    4/3/2/1/

    https://www.ideone.com/g93Io5
    通过在线测试

    点赞 评论 复制链接分享

相关推荐