#include<iostream> #include<stdlib.h> #include<stdio.h> #define ERROR 0 #define Stack_Init_Size 100 #define StackIncerMent 10 #define OK 1 using namespace std; typedef struct { int *base; int *top; int stacksize; }SqStack; typedef int Status; //构造一个空栈 Status InitStack(SqStack &s){ s.base=(int *)malloc(Stack_Init_Size*sizeof(int)); if(!s.base) return ERROR; s.top=s.base; s.stacksize=Stack_Init_Size; return OK; } //销毁栈 Status DestroyStack(SqStack &s){ s.top=NULL; s.stacksize=0; free(s.base); return OK; } //把栈设置为空 Status ClearStack(SqStack &s){ s.base=NULL; return OK; } //判断栈是否为空 bool StackEmpty(SqStack s){ if (s.top==s.base) return 1; else return 0; } //返回栈的长度 Status StackLength(SqStack s){ if(s.base==s.top) return ERROR; return s.stacksize; } //得到栈顶元素 Status GetTop(SqStack s,int &e){ if(s.base==s.top) return ERROR; e=*--s.top; return OK; } //插入元素e为新的栈顶元素 Status push(SqStack &s,int e){ if((s.top-s.base)>=s.stacksize){ //如果栈满 s.base=(int *)realloc(s.base,(s.stacksize+StackIncerMent)*sizeof(int)); if(!s.base) return(ERROR); s.top=s.base+s.stacksize; s.stacksize+=StackIncerMent; } //top栈顶元素的上一个区域 *s.top++=e; return OK; } //删除栈顶元素 Status pop(SqStack &s,int &e){ if(s.base==s.top) return ERROR; e=*--s.top; return OK; } int main(){ int n,l; SqStack s; InitStack(s); cin>>n; while(n){ push(s,n%8); n/=8; } while(!StackEmpty(s)){ pop(s,l); cout<<l; } system("pause"); return 0; }
时间: 2024-10-21 05:32:51