栈的实现

栈的实现

一、目的:

掌握栈的表示,实现及其针对栈的各种操作。

二、要求:

建立一个顺序栈,实现栈常用的基本操作。栈的应用基本上基于这些方法实现的。

完成用以实现10进制数转换成任意进制(2~9)的数据。

三、实验内容

1、设计程序。

2、调试程序,并设计输入数据。

 

四、实验报告要求

写出程序和实验结果。

 

#include "iostream.h"
//这里还要加入我们默认的常量头文件
//#include "head.h"

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define OVERFLOW 0
#define ERROR 0
#define CANCEL 0
typedef int SElemType;

typedef struct
{
  SElemType *base;
  SElemType *top;
  int stacksize;
}SqStack;

int 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;
}

int 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;
}

int 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;
}

int ClearStack(SqStack &S)
{
   S.top=S.base;
   return OK;
}

int Push(SqStack &s,SElemType e)
{
  if(s.top-s.base>=s.stacksize)
   return OVERFLOW;
  *s.top++=e;
return OK;
}

int Pop(SqStack &s,SElemType &e)
{
  if(s.top==s.base) return ERROR;
  e=*--s.top;
 return OK;
}

int StackTraverse(SqStack s,int(*visit)(SElemType c))//这个函数最好不要用,因为它已经破坏了栈的特性
{
  while(s.top>s.base)
   visit(*s.base++);
   cout<<endl;
   return OK;
}
int visit(SElemType c)
{
  cout<<c<<" ";
  return OK;
}
void main() //为进制转换的函数
{
SqStack S;
SElemType N;
int M;
SElemType e;
InitStack(S);
cout<<"input the number:";
cin>>N;
cout<<"输入要转换的数制:";
cin>>M;
while(N)
{
Push(S,N%M);
N=N/M; //转换为M进制的数
}
while(!StackEmpty(S))
{
Pop(S,e);
cout<<e;
}
cout<<endl;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值