2742 Review Template and Stack (eden)

Description

key points:

template class and function, stack and queue.

Description:

In this assignment, you need to complete Class Stack’s declaration and
definition with Template. The different thing is that the Stack is implemented
by two queues. Following is the example of Stack in integer:

class Stack {
  public:
    Stack(); // constructor.
    void push(const int& data); // push operation.
    int pop(); // return the value in the top and pop it out of the stack.
    int top(); // return the value in top.
    int size() const;  // return size of the stack.
    bool empty(); // check whether is empty.

  private:
    queue<int> q1; // two queues.
    queue<int> q2;
    int count; // the number of elements.
};

**And you need to define a print function to print the content in the Stack from
top to bottom. The format is: every element is followed by a blank space and
an endl in the end.**

Extra:

  1. You are not allowed to use any STL except “queue”.

  2. For more detail, see the codes in main.cpp.

出题人:黎洋

Provided Codes

main.cpp

#include "Stack.h"
#include<iostream>
#include<exception>

using namespace std;

class StackForbidden : public exception {
    virtual const char *what() const throw() {
        return "Please do not use Stack in stl..";
    }
};

int main() {

    #if defined(_GLIBCXX_STACK)
        throw StackForbidden();
    #endif

    Stack<int> stack;
    stack.push(88);
    stack.push(44);
    stack.push(99);

    cout << "The size is: " << stack.size() << endl;
    if (!stack.empty()) cout << stack.top() << endl;
    print(stack);

    stack.pop();
    print(stack);

    stack.push(777);
    cout << "The size is: " << stack.size() << endl;
    if (!stack.empty()) cout << stack.top() << endl;
    print(stack);

    stack.pop();
    stack.pop();
    cout << "The size is: " << stack.size() << endl;
    print(stack);
    stack.pop();
    if (!stack.empty()) cout << stack.top() << endl;
    else cout << "it is empty now." << endl;

    Stack<double> stack1;
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        stack1.push(i + 0.01);
    }
    print(stack1);
    while (m--) {
        stack1.pop();
    }
    cout << "The size is: " << stack1.size() << endl;
    if (!stack1.empty()) cout << stack1.top() << endl;
    print(stack1);

}

Submission

Stack.h

参照

#ifndef STACK_H
#define STACK_H
#include <queue>
#include <iostream>
using namespace std;
template <typename Type> 
void print(Type); 
template <typename T>
class Stack {
 public:
    Stack(); // constructor.
    void push(const T& data); // push operation.
    T pop(); // return the value in the top and pop it out of the stack.
    T top(); // return the value in top.
    int size() const;  // return size of the stack.
    bool empty(); // check whether is empty.
    friend void print<>(Stack<T> a);
 private:
    queue<T> q1; // two queues.
    queue<T> q2;
    int count; // the number of elements.
};

template <typename T>
Stack<T>::Stack(){
    count=0;
}
template <typename T>
void Stack<T>::push(const T& data){
    q1.push(data);
    ++count;
}
template <typename T>
T Stack<T>::pop(){
    if(empty())
        return -1;
    T tem=q1.back();
    --count;
    for(int i=0;i<count;i++){
        q2.push(q1.front());
        q1.pop();
    }
    q1.pop();
    for(int i=0;i<count;i++){
        q1.push(q2.front());
        q2.pop();
    }
    return tem;
}
template <typename T>
T Stack<T>::top(){
    return q1.back();
}
template <typename T>
int Stack<T>::size() const{
    return count;
}
template <typename T>
bool Stack<T>::empty(){
    if(count==0)
        return true;
    return false;
}
template <typename Type>
void print(Type a){
    int tem=a.size();
    for(int i=0;i<tem;i++)
        cout<<a.pop()<<" ";
    cout<<endl;
}

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值