堆栈应用之进制转换(参考严蔚敏数据结构)

来源:互联网 发布:项目管理信息系统 软件 编辑:程序博客网 时间:2024/06/05 16:34
#include<iostream>#include<malloc.h>using namespace std;#define STACKSIZE 7#define SIZEADD 3typedef int ElemType;typedef struct Stack{ElemType *pBottom;    ElemType *pTop;int Stacksize;}Stack;void InitStack(Stack &S){S.pBottom = new ElemType[STACKSIZE];S.pTop = S.pBottom;S.Stacksize = STACKSIZE;}void DestroyStack(Stack &S){delete[]S.pBottom;S.pBottom = NULL;S.pTop = NULL;S.Stacksize = 0;}void ClearStack(Stack &S){S.pTop = S.pBottom;}bool StackEmpty(Stack S){if (S.pBottom == S.pTop)return true;elsereturn false;}int StackLength(Stack S){return(S.pTop - S.pBottom);}void Push(Stack &S, ElemType e){if (S.pTop - S.pBottom >= S.Stacksize){S.pBottom = (ElemType *)realloc(S.pBottom,(STACKSIZE + SIZEADD)*sizeof(ElemType));S.pTop = S.pBottom + S.Stacksize;S.Stacksize += SIZEADD;}*S.pTop++ = e;}void Pop(Stack &S, ElemType &e){if (StackEmpty(S))return;e = *--S.pTop;}void GetTop(Stack S, ElemType &e){if (StackEmpty(S))return;e = *(S.pTop - 1);}void Visit(ElemType e){cout << e << " ";}void TraverseAs(Stack S){ElemType *p = S.pBottom;if (StackEmpty(S))return;while (p < S.pTop){Visit(*p);++p;}cout << endl;}void TraverseDe(Stack S){ElemType *p = S.pTop;if (StackEmpty(S))return;while (p > S.pBottom){--p;Visit(*p);}cout << endl;}void Conversion(){ElemType data,e;Stack S;InitStack(S);cout << "Enter a number:";cin >> data;//进制待转化的十进制整数while (data){Push(S, data % 8);data /= 8;}while (!StackEmpty(S)){Pop(S, e);Visit(e);}}void Conversion1(){ElemType data, e;Stack S;InitStack(S);cin >> data;while (data){Push(S, data % 8);data /= 8;}TraverseDe(S);DestroyStack(S);}int main(void){Conversion1();return(0);}

0 0
原创粉丝点击