现在的位置: 首页 > 综合 > 正文

顺序栈

2013年02月14日 ⁄ 综合 ⁄ 共 1659字 ⁄ 字号 评论关闭

顺序栈(C++)

#include "iostream.h"
#include "malloc.h"
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef int Status;
typedef int SElemType;

//顺序栈的定义
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

//---------------以下为基本操作

//构造一个栈
Status InitStack(SqStack &S)
{
   S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof( SElemType ));
if(!S.base)
{
  cout<<"存储空间分配失败!"<<endl;
  return 0;
}
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 1;
}

//初始化一个栈
Status Input(SqStack &S,int n)
{  
int i;
if(n>0)
{
     cout<<"请输入第"<<1<<"个元素的值"<<endl;
      cin>>*S.base;
   S.top++;
     for( i=2;i<=n;i++)
  {
  cout<<"请输入第"<<i<<"个元素的值"<<endl;
  cin>>*S.top;
   S.top++;
  }
   return 1;
}
else
{
  cout<<"输入数据不合法!"<<endl;
     return 0;
}

}

//查看栈顶元素
Status GetTop(SqStack S,SElemType &e)
{
if(S.top==S.base)
{
  cout<<"目前为空栈,无栈顶元素!"<<endl;
  return 0;
}
e=*(S.top-1);
cout<<"当前栈顶元素为"<<e<<endl;

return 1;
}

//向栈顶插入一个元素
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
  S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
  if(!S.base)
  {
   cout<<"执行插入操作分配存储空间时失败!"<<endl;
      return 0;
  }
  S.top=S.base+S.stacksize;
  S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}

//删除栈顶元素
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)
{
  cout<<"目前为空栈,无法执行删除栈顶元素的操作!"<<endl;
  return 0;
}
e=*--S.top;
return 1;
}

//--------------主函数
void main()
{

cout<<"\n--------------------顺序栈-----------------"<<endl;
SqStack stc;
InitStack(stc);
int num;
cout<<"请输入初始时欲在栈中放入的元素的个数"<<endl;
cin>>num;
cout<<endl;
Input(stc,num);
SElemType value;
cout<<endl;
GetTop(stc,value);
cout<<"请输入欲插入元素的值"<<endl;
cin>>value;
cout<<endl;
Push(stc,value);
cout<<"插入的元素的值为"<<value<<endl;GetTop(stc,value);
cout<<endl;
Pop(stc,value);
cout<<"刚刚删除的栈顶元素的值为"<<value<<endl;GetTop(stc,value);

}

 

抱歉!评论已关闭.