链表,数组实现堆栈,表达式计算

本文介绍了使用C++通过数组和链表两种方式实现堆栈,并应用于表达式的中缀转后缀及计算。分别提供了ArrayStack和LinkStack的实现,以及Test和Expression类的详细说明,最后在Main()函数中进行了测试。
摘要由CSDN通过智能技术生成

一、 结果显示

  1. 堆栈实现测试 Test.h
    在这里插入图片描述
  2. 表达式运算: Expression.h
    在这里插入图片描述
    二、 ArrayStack.h

 #include<iostream>
    using namespace std;
    
    const int Max_size = 128;
    
    template<typename T>
    class ArrayStack
   {
    public:
        ArrayStack()
        {
            count = 0;
            array = new T[Max_size];
        };
        ~ArrayStack()
        {
            if(count == 0)
        {
            delete array;
            cout<<endl;
            cout<<"栈为空析构"<<endl;
        }
        else
        {
            while(count > 0)
                this->pop();
            delete array;
            cout<<endl;
            cout<<"清除栈内元素析构"<<endl;
        }
    };
 	T pop()    //弹栈
	{
   		 if(count < 0 )
   		 {
    	    cout<<endl;
    	    cout<<"弹栈时:栈内元素数量有误!"<<endl;
   		 }
	    if(count == 0)
  	    {
     	   cout<<endl;
           cout<<"弹栈时:栈为空!"<<endl;
        }
        else
            return array[(count--)-1];
   	 }

    void push(T data)  //推栈
    {
        if(count < 0 )
        {
            cout<<endl;
            cout<<"推栈时:栈内元素数量有误!"<<endl;
        }
        else
            array[(++count)-1] = data;
    }

    int size()   //栈内元素个数
    {
        return count;
    }

    bool isEmpty()   //判断栈内是否为空
    {
        return count == 0?1:0;
    }

    T top()      //返回栈顶元素
    {
        if(count == 0)
            cout<<"栈顶:栈为空栈!!!"<<endl;
        else
            return array[count-1];
    }

    void Show()
    {
        if(count<0)
        {
            cout<<endl;
            cout<<"Show:堆栈内元素个数有误!"<<endl;
        }
        if(count == 0)
        {
            cout<<endl;
            cout<<"Show:堆栈为空!"<<endl;
        }
        else
        {
            int i = count;
            cout<<endl;
            cout<<"Show:堆栈内元素为:"<<"[";
            for(; i>1; i--)
                cout<<array[count-i]<<",";
            cout<<array[count-1];
            cout<<"]"<<endl;
        }
    }
    int count;
    protected:
        T *array;
         };

三、 LinkStack.h

#include<iostream>
using namespace std;

template<typename T>
class LinkStack
{
public:
    int count;

    struct Node
    {
        T data;
        Node *next;
    };

    LinkStack()
    {
        count = 0;
        head = new Node;
        head->next = NULL;
    };
    ~LinkStack()
    {
        if(count =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值