2010-09-28 13:32:44
//数制转换
//typedef int SElemType;
#include "num_system1.h"
Status InitStack(SqStack &s)
{
//构造一个空栈;
s.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!s.base)
exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(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;
return OK;
}
Status Pop(SqStack &s,SElemType &e)
{
//若栈不空,则删除s的栈顶元素,用e返回其值;并返回OK;否则返回ERROR;
if(s.top==s.base)
return ERROR;
e=*--s.top;
return OK;
}
Status StackEmpty(SqStack s)
{
if (s.top==s.base)
return TRUE;
else
return FALSE;
}
int N;
int e;
SqStack t;
void conversion()
{
//对于输入的任意的非负十进制数,打印与其等值的八进制数;
InitStack(t);
scanf("%d",&N);
while (N)
{
Push(t,N%8);
N=N/8;
}
while (!StackEmpty(t))
{
Pop(t,e);
printf("%d",e);
}
}
int main()
{
conversion();
printf("/n");
return 0;
}
head.h
#include <iostream.h>
#include <stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;