【牛客带你学编程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

相关推荐

从去年六月到现在,已经学习了快一年时间了。这里总结一下这一年来都干了啥,还有未来一年要干啥。首先,我读研就是为了找个好工作,所以都是为工作做的准备。大概去年6月初到8月末,我把黑马的cpp视频看了一遍,也在哔站看了一些数据结构网课。开学后,看了cpp&nbsp;primer,C++11相关的书。然后看了Linux网络编程,操作系统,也着手做了一些题。但是非常混乱,所以打算理一理。然后就是经典的webserver,其实一开始没看操作系统和网络编程还真看不懂这个,虽然大家都说简单。然后呢,我打算再学一门语言,本来是打算学java,甚至基础部分语法都看过了,后来转向go语言。因为预先学过c++,所以学这个很快,学完语法看了一本《深入理解go语言》,这书后面有个网络框架项目,我跟着做了一遍,感觉协程比那线程池好使多了。又方便又快捷。说起来,我也学着用c语言写了一个协程库,网络上只要愿意找会有很多资源。然后呢打算看一下云原生,我觉得印度人写的书真有东西,但他不会管你能不能看懂,教他是真教,你能不能学会他不管。我看一本kubernets和dockers容器相关的书,但是看不懂,就没看了。其实不该过于急躁,我时刻警醒自己。但我就是很急。然后呢就转向分布式存储,看了一些书,学着写一个分布式存储系统,也在这里用到了rabbitmq,但是做到后面要用到elasticsearch,我一运行虚拟机就直接卡住。我也不知道要怎么整。至此已是四月份的事了。这么一看,真是非常的杂。这段时间呢,先把期末考试解决了。未来就两个方向,一个c++,&nbsp;一个go。我打算开始认真刷题了。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务