【牛客带你学编程C++方向】项目练习第7期(截止5.16)


C++项目练习:第7期
练习时间:5月2日-5月16日(2周)
活动规则:
  • 每一期一个项目,届时会开新帖发布
  • 学员直接将答案提交到该贴评论区即可
  • 两周后,公布导师参考答案
  • 导师评选出当期最佳代码(将设置为精彩回复

奖励:牛客大礼包一份(牛客定制水杯 牛客定制笔 牛客定制程序员徽章 滑稽抱枕)
参与方式:直接将你的代码回复到本帖评论区

----------------------------------------------------

本期题目:

实现模板类栈stack的数据结构:
类定义如下,要求实现对应栈的功能。
template <typename T, int MAX_SIZE>
class Stack
{
public:
    Stack();
    ~Stack();
    void Push(const T &elem); //压入元素
    void Pop();            //弹出元素
    T &Top();                //取栈顶
    const T &Top() const;
    bool Empty() const;
private:
    T *elems;    //使用数组的方式存储
    int top;
};

参与方式:直接将你的代码回复到本帖评论区

全部评论
template <typename T, int MAX_SIZE> class Stack { public:     Stack() :elems(NULL)         , top(0)         , capacity(0)     {}     ~Stack()     {             delete[] elems;             elems = NULL;     }     void Push(const T &elem) //压入元素     {         //int size = sizeof(elems);          checkCapacity();         if (top <= MAX_SIZE)         {             elems[top] = elem;             top++;         }         else         {             printf("栈已满,无法添加数据\n");         }     }     void Pop()           //弹出元素     {         top = top - 1;         if (top == -1)         {             printf("栈已空,没有数据可删除\n");         }     }     T &Top()                //取栈顶     {         return elems[top];     }     const T &Top() const     {         return elems[top];     }     bool Empty() const     {         return top == 0;     }     void checkCapacity()     {         if (top >= capacity)         {             capacity = capacity > 0 ? capacity * 2 : 3;             T* tmp = new T[capacity];             for (int i = 0; i < top; i++)             {                 tmp[i] = elems[i];             }             delete[] elems;             elems = tmp;         }     } private:     T *elems;    //使用数组的方式存储     int top;     int capacity; };
点赞 回复 分享
发布于 2018-05-02 12:33
template <typename T, int MAX_SIZE> class Stack { public:     Stack()     {         if(MAX_SIZE <=0)         {             printf("初始化错误");             return;         }         elems = NULL;         top = -1;         maxinum = 0;     };     ~Stack()     {         delete[] elems;     };     //压入元素     void Push(const T &elem)     {             if (top >= (maxinum-1))             UpdateNum();         if(top < (MAX_SIZE-1))             elems[++top] = elem; else printf("栈满!添加错误!");     };     //弹出元素     void Pop()     {         if(top > -1) top--; else             printf("栈空!删除错误!");     };      //取栈顶                T &Top()     {         return elems[top];     };                     const T &Top() const     {         return elems[top];     };         bool Empty() const     {         return top == -1;     };     void UpdateNum()         {           if(maxinum <= 0)             maxinum = 10;         else if(maxinum <= (MAX_SIZE/2))             maxinum = maxinum*2;         else             maxinum = MAX_SIZE;         T* tmp = new T[maxinum];         for (int i = 0; i <= top; i++)         {             tmp[i] = elems[i];         }         delete[] elems;         elems = tmp;         }; private:     T *elems;    //使用数组的方式存储     int top; //栈顶数据所在的索引     int maxinum; //当前栈的最大空间 };
点赞 回复 分享
发布于 2018-05-02 16:03
template <typename T, int MAX_SIZE> class Stack { public:     Stack()     {         elems =new T[MAX_SIZE];         top = 0;     }     ~Stack()     {         delete[] elems;     }     void Push(const T &elem) //压入元素     {         if (top < MAX_SIZE) {             elems[top++] = elem;         }         else cout << "栈区已满" << endl;     }     void Pop()            //弹出元素     {         if (--top <= 0) {             cout << "栈区已空" << endl;         }     }     T &Top()              //取栈顶     {         return elems[top];     }     const T &Top() const     {         return elems[top]; //考虑对象为const     }     bool Empty() const     {         return top == 0;     } private:     T *elems;    //使用数组的方式存储     int top; };
点赞 回复 分享
发布于 2018-05-02 19:44

相关推荐

去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务