C++编程练习(4)----“实现简单的栈的链式存储结构“

如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈;反之,如果它的变化在可控范围内,使用顺序栈会好一些。

简单的栈的链式存储结构代码如下:

/*LinkStack.h*/
#include<iostream>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;

class StackNode{
public:
	StackNode():data(0) {};
	SElemType data;
	StackNode *next;
};

class LinkStack{
public:
	LinkStack():count(0){};
	StackNode* top;
	int count;
	Status Push(SElemType e);	/*进栈操作*/
	Status Pop(SElemType *e);	/*出栈操作*/
	Status ShowStack() const;
};

Status LinkStack::Push(SElemType e)
{
	StackNode* s=new StackNode;
	s->data=e;
	s->next=top;
	top=s;
	count++;
	return OK;
}
Status LinkStack::Pop(SElemType *e)
{
	if (count<=0)
		return ERROR;
	StackNode* p=new StackNode;
	*e=top->data;
	p=top;
	top=top->next;
	delete p;
	count--;
	return OK;	
}
Status LinkStack::ShowStack() const
{
	if (count<=0)
		return FALSE;
	StackNode* p;
	p=top;
	int k=count;
	std::cout<<"按从栈顶至栈底依次显示:";
	while(k)
	{
		std::cout<<p->data<<" ";
		p=p->next;
		k--;
	}
	std::cout<<std::endl;
	return OK;
}

另:

栈的应用:

1、递归

2、四则运算表达式求值。

分两步:

step1、中缀表达式转后缀表达式(栈用来进出运算的符号);

step2、对后缀表达式进行运算(栈用来进出运算的数字)。

原文地址:https://www.cnblogs.com/fengty90/p/3768859.html