c++实现表达式树

因为我不会模板,所以我写了两个stack,一个用来存表达式使其变为后缀,另一用来存Node节点使其变为一棵树,在写的过程中我一直在思考要不要写拷贝和移动构造,最后还是没有写。

1、下面是表达式中缀变后缀的栈的代码:

声明:

#pragma once
#include <iostream>

using namespace std;


class MyStack {
private:
	const int DEAFAULT_CAPACITY = 10;/*定义栈初始化长度*/
	const int STACK_INCREMENT = 2;/*定义栈增量*/
	int* base;/*栈底元素*/
	int* top;/*栈顶的下一个元素*/
	int stackSize;/*目前容量*/
	int maxCapacity = 0;
public:
	MyStack();
	MyStack(initializer_list<int> list);  
	MyStack(MyStack& stack);
	MyStack(MyStack&& stack);
	~MyStack();
	int* begin();
	int* end();
	//入栈
	void push(int element);
	//退栈
	int pop();
	//得到栈顶元素
	int getTop();
	//清空
	void clear();
	//扩容操作
	void ensureCapacity(int newCapacity);
	int size();
};

定义:

#include <iostream>
#include "myStack.h"

using namespace std;

int* MyStack::begin() {
	return base;
}

int* MyStack::end() {
	return& base[stackSize];
}
MyStack::MyStack() {
	stackSize = 0;
	base = NULL;
	top = NULL;
}

MyStack::MyStack(initializer_list<int> list)
	:base(new int[list.size()]), stackSize(list.size()), maxCapacity(list.size()) {
	copy(list.begin(), list.end(), base);
	top = &base[list.size() - 1];
}

MyStack::MyStack(MyStack& stack) {
	stackSize = stack.stackSize;
	maxCapacity = stack.maxCapacity;
	base = new int[maxCapacity];
	for (int i = 0; i < stackSize; i++) {
		base[i] = stack.base[i];
	}
	top = &base[stackSize];
}

MyStack::MyStack(MyStack&& stack) {
	this->base = stack.base;
	stack.base = NULL;
	this->top = stack.top;
	stack.top = NULL;
	this->stackSize = stack.stackSize;
	this->maxCapacity = stack.maxCapacity;
}


MyStack::~MyStack() {
	if (base != NULL) {
		delete[] base;
		base = NULL;
	}
	top = NULL;
}

//入栈
void MyStack::push(int element) {
	if (stackSize == 0) {
		ensureCapacity(DEAFAULT_CAPACITY);
	}
	if (maxCapacity == stackSize) {
		ensureCapacity(maxCapacity * STACK_INCREMENT + 1);
	}
	*top = element;
	top = &(base[++(stackSize)]);
}

//退栈
int MyStack::pop() {
	if (stackSize == 0) {
		return NULL;
	}
	top = &(b
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请大声说话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值