学无先后,达者为师

网站首页 编程语言 正文

C++Stack栈类模版实例详解_C 语言

作者:诺谦   更新时间: 2022-04-28 编程语言

1.栈的介绍

栈的实现方式分为3

  • 基于静态数组实现,内部预设一个很大的数组对象, 实现简单,缺点是空间受限。
  • 基于动态数组实现,内部预设一个容量值,然后分配一段内存空间数组,如果入栈大于默认容量值时,则再次扩大分配新的内存数组,并将旧数组拷贝至新数组及释放旧数组.
  • 基于双向循环链表实现

栈的函数需要实现如下所示:

  • T pop() : 出栈并返回栈顶元素
  • void  push(const T &t) : 入栈 
  • const T & top() const : 获取const类型栈顶元素
  • T &top() : 获取栈顶元素
  • int length() const: 获取数量(父类已经实现)void clear(): 清空栈(父类已经实现)

本章,我们实现的栈基于动态数组实现,它的父类是我们之前实现的Vector类:

C++ 动态数组模版类Vector实例详解

所以代码实现会非常简单.

2.栈实现

代码如下所示:

#ifndef Stack_H
#define Stack_H
#include "throw.h"
// throw.h里面定义了一个ThrowException抛异常的宏,如下所示:
//#include 
//using namespace std;
//#define ThrowException(errMsg)  {cout<<__FILE__<<" LINE"<<__LINE__<<": "<
class Stack : public Vector
{
public:
    T pop()
    {
        if(Vector::isEmpty()) {        // 如果栈为空,则抛异常
            ThrowException("Stack is empty ...");
        }
        T t = Vector::data()[Vector::length() - 1];
        Vector::resize(Vector::length() - 1);
        return  t;
    }
    // 入栈,实际就是append尾部添加成员
    void push(const T &t)
    {
        Vector::append(t);
    }
    T &top()
    {
        if(Vector::isEmpty()) {
            ThrowException("Stack is empty ...");
        }
        return Vector::data()[Vector::length() - 1];
    }
    const T &top() const
    {
        if(Vector::isEmpty()) {
            ThrowException("Stack is empty ...");
        }
        return Vector::data()[Vector::length() - 1];
    }
};
#endif // Stack_H

3.代码测试

int main(int argc, char *argv[])
{
    Stack stack;
    cout<<"******* current length:"<

运行打印:

总结

原文链接:https://blog.csdn.net/qq_37997682/article/details/123123143

栏目分类
最近更新