栈的C++实现


栈是特殊的线性表,只能在尾部进行插入和删除

栈的顺序储存

#include<iostream>
#include<assert.h>
using namespace std;
#define max_size 10
class stack_m {
public:
	
	void pop_m();//弹出数组最后一个元素
	void push_m(int val);//在末尾添加一个元素,值为val
	bool isEmpty_m();//判断是否是空表
	bool isfull_m();//判断是否是满表
	void show_m();//遍历栈中所有元素
	void size_m();//栈中 已有元素的个数
private:
	int top=-1;//最上面的是第几个元素

	int data[max_size];
};
void stack_m::push_m( int val) {
	if (isfull_m()) {
		cout << "栈满" << endl;
		return;
	}
	top++;
	this->data[top] = val;
}

void stack_m::pop_m() {
	if (top==-1) {
		cout << "已经是空表,无法再进行弹出" << endl;
		return;
	}
	top--;
}

bool stack_m::isEmpty_m() {
	if (top == -1)
		return true;
	else
		return false;
}
bool stack_m::isfull_m() {
	if (top == max_size-1)
		return true;
	else
		return false;
}

void  stack_m::show_m() {
	if (this->isEmpty_m())
	{
		cout << "该对象里面没有任何元素!" << endl;
		return;
	}
	for (int i = 0; i < top+1; i++)
		cout << data[i] << endl;
}
void stack_m::size_m() {
	cout << (top+1) << endl;
}
int main() {
	stack_m my_stack;
	my_stack.push_m(3);
	my_stack.push_m(4);
	my_stack.pop_m();
	my_stack.show_m();
	my_stack.size_m();
	return 0;
}

栈的链式储存

切记:栈顶作为根节点,但是此根节点保存了元素val

#include<iostream>
using namespace std;

class node {
public:
	friend class stack_m;
private:
	int val;
	node* pnext;
};
class stack_m {
public:
	stack_m() {
		pTop = new node;
		pBottom = pTop;
		pTop->pnext = NULL;

	}
	void pop_m();//弹出数组最后一个元素
	void push_m(int val);//在栈顶添加一个元素,值为val
	bool isEmpty_m();//判断是否是空表
	void show_m();//显示当前所有元素的值
	void clear_m();//删除所有元素
private:
	node* pTop;//pTop作为头结点
	node* pBottom;//栈底,不存放任何元素
};

bool stack_m::isEmpty_m() {
	if (pTop == pBottom)
		return true;
	else
		return false;
}
void stack_m::clear_m() {

	node* temp = NULL;
	while (pTop) {
		temp = pTop;
		pTop = pTop->pnext;
		delete temp;
	}

}
void stack_m::pop_m( ) {
	if (isEmpty_m()) {
		cout << "已经是空表,无法再进行弹出" << endl;
		return;
	}
	node* temp = pTop;
	cout << "被弹出来的是:" << temp->val << endl;
	pTop = pTop->pnext;
	delete temp;
	
}


void stack_m::push_m( int val) {
	node* pnew = new node();
	pnew->val = val;
	node* temp = pTop;
	pnew->pnext=pTop;
	pTop = pnew;


}

void stack_m:: show_m( ) {
	node* ptemp = pTop;
	while (ptemp!=pBottom ) {
		cout << ptemp->val;
		ptemp = ptemp->pnext;
	}
}

int main() {
	stack_m my_stack;

	my_stack.push_m(2);
	my_stack.push_m(3);
	my_stack.push_m(4);
	my_stack.push_m(5);
	my_stack.show_m();
	my_stack.pop_m();
	my_stack.show_m();
	return 0;
}

栈的应用 ——中缀表达式 转化为 后缀表达式

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qiqi__xu/article/details/89526969
今日推荐