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

数制转换_顺序栈_头文件

2013年09月30日 ⁄ 综合 ⁄ 共 1965字 ⁄ 字号 评论关闭

将写好的头文件添加到工程的文件夹Head内,然后再编写源程序。

头文件"顺序栈.h":

#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 StackEmpty_Or_not(SqStack S)
{  if(S.top==S.base)
{

  return 0;
}
    else
     return 1;

}

//查看栈顶元素
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;
}

源文件"数制转换_顺序栈.cpp":

#include "iostream.h"
#include "顺序栈.h"

SqStack stc;

//对于输入的数据进行数制转换
int conversion()
{
   InitStack(stc);
   int value,jinzhi;
   loop:  cout<<"请输入欲进行转换的数据以及欲转换成的进制数(*两者都得大于0)"<<endl;
   cin>>value>>jinzhi;
   if(value<=0 || jinzhi<=0)
   { 
    cout<<"您输入的数据不合法(应该>0)"<<endl;
       goto loop;
        //  return 0;
   }
    cout<<"数据 "<<value<<" 转换成 "<<jinzhi<<" 进制的数据后,其值为 :"<<endl;
      while(value)
   {
    Push(stc,value%jinzhi);
    value=value/jinzhi;

   }
   while( StackEmpty_Or_not(stc) )
   {
       Pop(stc,value);
    cout<<value;
   }
   cout<<endl;
   return 1;
}

void main()
{

cout<<"================数制转换==========="<<endl;
conversion();
}

抱歉!评论已关闭.