65,211
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
#include <stdio.h>
using namespace std;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef bool Status;
#define OVERFLOW -1
#define OK 1
#define ERROR 0
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=new SElemType[STACK_INIT_SIZE];
if(!S.base)
return OVERFLOW;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack &S)
{
S.top=NULL;
S.base=NULL;
delete[] S.base;
S.stacksize=0;
return OK;
}
int StackEmpty(SqStack s)
{
if(s.top==s.base) return 1;
else return 0;
}
Status GetTop(SqStack &s,SElemType &e)
{
if(s.top==s.base) return ERROR;
e=*(s.top-1);
return OK;
}
int StackLength(SqStack s)
{
return s.top-s.base;
}
Status ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}
Status Push(SqStack &s,SElemType e)
{
if(s.top-s.base>=s.stacksize)
return OVERFLOW;
*s.top++=e;
return OK;
}
Status Pop(SqStack &s,SElemType &e)
{
if(s.top==s.base) return ERROR;
e=*--s.top;
return OK;
}
Status StackTraverse(SqStack s,Status(*visit)(SElemType c))//这个函数最后不要用,因为它已经破坏了栈的特性
{
while(s.top>s.base)
visit(*s.base++);
cout<<endl;
return OK;
}
Status visit(SElemType c)
{
cout<<c<<" ";
return OK;
}
int main() {
SqStack a;
InitStack(a);
printf("%s empty!\n", StackEmpty(a)?" yes ": " no ");
Push(a, 10);
Push(a, 11);
Push(a, 12);
printf("%s empty!\n", StackEmpty(a)?" yes ": " no ");
int popvalue;
while(!StackEmpty(a)) {
Pop(a, popvalue);
cout << popvalue << endl;
}
DestroyStack(a);
}

要不估计被骂死
#include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef bool Status;
#define OVERFLOW -1
#define OK 1
#define ERROR 0
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=new SElemType[STACK_INIT_SIZE];
if(!S.base)
return OVERFLOW;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack &S)
{
S.top=NULL;
S.base=NULL;
delete[] S.base;
S.stacksize=0;
return OK;
}
int StackEmpty(SqStack s)
{
if(s.top==s.base) return 1;
else return 0;
}
Status GetTop(SqStack &s,SElemType &e)
{
if(s.top==s.base) return ERROR;
e=*(s.top-1);
return OK;
}
int StackLength(SqStack s)
{
return s.top-s.base;
}
Status ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}
Status Push(SqStack &s,SElemType e)
{
if(s.top-s.base>=s.stacksize)
return OVERFLOW;
*s.top++=e;
return OK;
}
Status Pop(SqStack &s,SElemType &e)
{
if(s.top==s.base) return ERROR;
e=*--s.top;
return OK;
}
Status StackTraverse(SqStack s,Status(*visit)(SElemType c))//这个函数最后不要用,因为它已经破坏了栈的特性
{
while(s.top>s.base)
visit(*s.base++);
cout<<endl;
return OK;
}
Status visit(SElemType c)
{
cout<<c<<" ";
return OK;
}
int main() {}