基於SqStack 進制計算函數
#include<malloc.h> #include<stdio.h> #include<stdlib.h> typedef int Status; typedef int SElemType; #define STACK_INIT_SIZE 100 #define STACKINCREMENT 20 #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef struct SqStack { SElemType *base; SElemType *top; int stacksize; } SqStack; // 順序棧 Status InitStack(SqStack &S) { // 構造一個空棧S if (!(S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)))) exit(OVERFLOW); // 存儲分配失敗 S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } int GetTop(SqStack S) { // 若棧不空,則用e返回S的棧頂元素 if (S.top>S.base) return *(S.top - 1); } 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; S.top++; return OK; } Status Pop(SqStack &S, SElemType &e) { // 若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;不然返回ERROR if (S.top == S.base) return ERROR; //e=*--S.top;//e=*S.top; S.top--; e = *S.top; return e; } Status StackTraverse(SqStack S, Status(*visit)(SElemType)) { // 從棧底到棧頂依次對棧中每一個元素調用函數visit()。 // 一旦visit()失敗,則操做失敗 while (S.top>S.base) visit(*S.base++); printf("\n"); return OK; } int main() { SqStack S; int x, y, e,num1; InitStack(S); printf("輸入一個十進制數:\n"); scanf("%d", &x); printf("輸入一個進制數:\n"); scanf("%d", &num1); while (x) { Push(S, x % num1); x = x / num1; } while (S.base != S.top) { y = Pop(S, e); printf("%d", y); } printf("\n======================\n"); system("pause"); return 0; }
參考:https://blog.csdn.net/sunshunli/article/details/78461172spa