如何在C++中实现fullstack coroutine
2个回答
2016-05-30 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
#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++常用的做法,不过原理都差不多……
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++常用的做法,不过原理都差不多……
2016-05-31
展开全部
#include#include#include//字符串拷贝函数头文件classCMessageStack{private:intm_Point;//现在消息存放的位置charm_Message[2000][1000];public:voidMessageStack()//构造函数,初始化类内部定义函数不需要加这个CMessageStack::,如果是类外部定义必须加{m_Point=0;//memset(m_Message,0,2000*1000);printf("构造函数");}boolDepMessage(constcharIn_Message[1000]){//存消息的函数if(m_Point<2000-1)//如果栈未满{strcpy(m_Message[m_Point],In_Message);//复制到栈中m_Point++;//表明多了一个消息returntrue;//成功添加}else//栈满{returnfalse;}}boolSeekMessage(charIn_Message[1000]){//取消息的函数if(m_Point)//当栈中消息数量!=NULL时{strcpy(In_Message,m_Message[m_Point-1]);//拷贝memset(m_Message[m_Point-1],0,1000);m_Point--;//消息减1returntrue;}else//栈空{returnfalse;}}intGetMessageCount(void)//取消息总数{returnm_Point;}};intmain(){CMessageStackstack;//这一句引发内存错误printf("he");system("pause");return0;}编译通过如果你是第一次写类,建议先一点点写,别写这么复杂的,不容易懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询