码迷,mamicode.com
首页 > 其他好文 > 详细

栈的操作及进制转换

时间:2015-06-04 22:40:50      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
#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;

}
View Code

 

栈的操作及进制转换

标签:

原文地址:http://www.cnblogs.com/wintersong/p/4552990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!