栈操作和应用—数制转换

来源:互联网 发布:清新网站引导页源码 编辑:程序博客网 时间:2024/06/05 07:40

以下代码包括详尽的栈的操作和数制转换的应用,后面会陆续带来更多栈的应用。

#include "stdafx.h"#include <iostream>using namespace std;//宏定义,为了修改方便#define STACK_INIT_SIZE     100#define STACKINCREMENT      10#define OK                  1#define ERROR               0#define CONVERSION_NUM      8typedef int     SElemType;typedef int     Status;         typedef struct{    SElemType *base;    SElemType *top;    int stackSize;}stack;stack s; //全局变量,栈Status InitStack(stack &s){    s.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));    if(!s.base){cout<<"内存不足!"<<endl;return ERROR;}    s.top = s.base;    s.stackSize = STACK_INIT_SIZE;    return OK;}Status DestroyStack(stack &s){    free(s.base);    return OK;}Status ClearStack(stack &s){    s.top = s.base;    s.stackSize = STACK_INIT_SIZE;    return OK;  }bool StackEmpty(stack s){    if(s.base == s.top) return true;    else return false;}int StackLength(stack s){    return s.top - s.base;}Status GetTop(stack s,SElemType &e){    if(s.top == s.base) {cout<<"当前栈为空!"<<endl;e = 0;return ERROR;}    e = *(s.top - 1);    return OK;}Status Push(stack &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 ERROR;}        s.stackSize = s.stackSize + STACKINCREMENT;    }    *s.top = e;    s.top ++;       return OK;}Status Pop(stack &s,SElemType &e){    if(s.base ==s.top){cout<<"栈为空!"<<endl;return ERROR;}    s.top --;    e = * s.top;    return OK;}//应用1,数制转换   十进制->CONVERSION_NUM进制void conversion(int n){    InitStack(s);    int e = 0;    while(n){        Push(s,n % CONVERSION_NUM);        n = n / CONVERSION_NUM;    }    while(!StackEmpty(s)){        Pop(s,e);        cout<<e;    }    cout<<endl;}int main(int argc, char* argv[]){    int num;    cout<<"输入十进制数:";    cin>>num;    conversion(num);    return 0;}
1 0
原创粉丝点击