如何在C++中实现fullstack coroutine

如题所述

第1个回答  2017-10-05
#include <iostream>
using namespace std;

typedef int DataType;

class SeqStack /*顺序栈类型定义*/
{
public:
int MAXNUM; /*栈中最大元素个数*/
int t; /*t < MAXNUM,指示栈顶位置,而不是元素个数*/
DataType *s; /*存放栈元素*/
};

typedef SeqStack *PSeqStack; /*顺序栈类型的指针类型*/

/*创建一个空栈*/
PSeqStack createEmptyStack(int m)
{
PSeqStack pastack = (PSeqStack) new SeqStack; /*分配一个空栈(空结构体)*/

if(pastack != NULL)
{
pastack->s = (DataType *)malloc(sizeof(DataType) * m); /*分配一个长度为m的栈*/

if(pastack->s) {
pastack->MAXNUM = m; /*确定最大长度为m*/
pastack->t = -1; /*初始化栈顶为-1*/
return (pastack); /*返回该栈*/
}
else
delete(pastack);

}

cout << "Out of space!! \n"; /*分配失败*/
return NULL;
}

/*判断pastack是否为空*/
int isEmptyStack(PSeqStack pastack)
{
if(pastack->t == -1) /*栈为空*/
return 1;
else
return 0; /*栈不为空*/
}

/*进栈运算*/
void push(PSeqStack pastack , DataType x)
{
if(pastack->t >= pastack->MAXNUM - 1) /*判断栈顶是否上溢*/
cout << "Overflow! \n";
else
{
pastack->t = pastack->t + 1; /*栈顶加1*/
pastack->s[pastack->t] = x; /*入栈*/
}
}

/*出栈运算*/
void pop(PSeqStack pastack)
{
if(pastack->t == -1) /*判断栈顶是否下溢*/
cout << "Underflow! \n";
else
pastack->t = pastack->t - 1; /*出栈,即栈顶减1*/
}

/*取栈顶元素*/
DataType top(PSeqStack pastack)
{
if(pastack->t == -1)
cout << "It is empty! \n";
else
return (pastack->s[pastack->t]); /*返回栈顶元素*/

return -1; /*空栈*/
}

int main()
{
int max , value;
PSeqStack s;

cout << "请输入要分配栈的最大长度: ";
cin >> max;

s = createEmptyStack(max);

/*判断是否为空栈*/
cout << "创建了一个栈:";
if(isEmptyStack(s))
cout << "为空 \n";
else
cout << "不为空 \n";

/*输入栈元素*/
cout << "请输入要入栈的元素(输入-1结束):\n";
cin >> value;
for( ; value != -1;)
{
push(s , value);
cin >> value;
}

/*出栈*/
cout << "当前栈顶元素: ";
cout << top(s) << endl;

cout << "请输入出栈次数:\n";
cin >> value;

for( ; value; --value)
pop(s);

cout << "当前栈顶元素: ";
cout << top(s) << endl;

return 0;
}

这是我以前学的时候用C做的,我帮你把它改成了C++

push、pop、top等就是函数,理解栈的原理的就行 ,当然也可以把这些函数也封装在里面,这是C++常用的做法,不过原理都差不多……