3栈的顺序结构的基本操作

发布时间:2014-01-03 15:21:02   来源:文档文库   
字号:

3栈的顺序结构的基本操作

#include

#include

using namespace std;

#define TRUE 1

#define FALSE 0

#define ok 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef int SElemType;

#define STACK_INIT_SIZE 100//存储空间初始化分配量;

#define STACKINCREMENT 10//存储空间分配增量;

typedef struct{

SElemType *base;//在栈构造之前和销毁之后,base的值为NULL

SElemType *top;//栈顶指针

int stacksize;//当前已分配的存储空间,以元素为单位;

int StackLength;

}SqStack;

Status InitStack_Sq(SqStack &S){//初始化操作;

S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));//分配基本容量;

if(S.base==NULL) return ERROR;//设置栈顶指针和栈底指针相同,均指向栈底;

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;//设置栈的当前容量为基本容量;

return ok;

}//InitStack_Sq;

Status Push_Sq(SqStack &S,SElemType e){//插入元素e为新的栈顶元素;

if(S.top-S.base>=S.stacksize)

{//栈满,追加存储空间;

S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!S.base)exit (OVERFLOW);//分配失败;

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top=e;

S.top++;

return ok;

}//Push_Sq;

Status Pop_Sq(SqStack &S,SElemType &e){

//若栈不空,则删除S的栈顶元素,用e返回其值,并返回ok;否则返回ERROR;

if(S.top==S.base)return ERROR;

e=*(S.top-1);// e=*--s.top;

S.top--;

return ok;

}//Pop_Sq;

Status GetTop_Sq(SqStack S,SElemType &e){

//若栈不为空,则用e返回S的栈顶元素,并返回;否则返回ERROR

if(S.top==S.base)return ERROR;//判空;

e=*(S.top-1);

return ok;

}//GetTop_Sq;

Status StackTraverse_Sq(SqStack S){//遍历;

int i;

if(S.top==S.base) return ERROR;

for(i=0;i<(S.top-S.base);i++)

cout<

return ok;

}//StackTraverse_Sq;

Status StackEmpty_Sq(SqStack S){//判空;

if(S.top==S.base) cout<<"是空栈!"<

else

cout<<"不是空栈!"<

return ok;

}//StackEmpty_Sq;

int main()

{

SqStack S;

SElemType e1,e2;

int a,b,n,i,k;

InitStack_Sq(S);

cout<<"输入初始化栈的元素个数: ";

cin>>n;

cout<<"输入初始化元素: ";

for(i=1;i<=n;i++){

cin>>a;

Push_Sq(S,a);

}

while(true){

cout<<"栈操作: 1.入栈;2.出栈;3.读取栈顶元素;4.遍历;5.判空;6.退出"<

cout<<"选择您需要进行的栈操作: ";

cin>>a;

if(a==1){

cout<<"输入入栈的元素:";

cin>>b;

Push_Sq(S,b);

cout<<"当前栈的元素为:"<

StackTraverse_Sq(S);

cout<

}

if(a==2){

k=Pop_Sq(S,e1);

if(!k)return ERROR;

else

cout<<"元素"<出栈成功!"<

}

if(a==3){

k=GetTop_Sq(S,e2);

if(!k)return ERROR;

else

cout<<"读取栈顶元素"<成功!"<

}

if(a==4){

StackTraverse_Sq(S);

cout<

}

if(a==5){

StackEmpty_Sq(S);

}

if(a==6)break;

}

return 0;

}

本文来源:https://www.2haoxitong.net/k/doc/b14be32b59eef8c75fbfb365.html

《3栈的顺序结构的基本操作.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式