1. 程式人生 > >C語言棧的實現進位制轉換

C語言棧的實現進位制轉換

棧是限定僅在表尾進行操作的線性表。因此,對棧來說,表尾端有其特殊含義,成為棧頂,相應地,表頭端稱為棧底。

下面用C實現棧的基本操作以及利用棧來實現一個進位制轉換程式
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;

typedef struct{
    SElemType * base;
    SElemType * top;
    int
stacksize; }SqStack; int InitStack(SqStack &S) { S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) return 0; S.top = S.base ; S.stacksize = STACK_INIT_SIZE; return 1; } //新增棧元素 int Push(SqStack &S,SElemType e){ if(S.top-S.base >= S.stacksize) { S.base
= (SElemType * )realloc(S.base,(S.stacksize+STACK_INIT_SIZE)*sizeof(SElemType)); if(!S.base) return 0; S.top = S.base + S.stacksize; S.stacksize += STACK_INIT_SIZE; } * S.top = e; S.top ++ ; return 1; } int Pop(SqStack &S,SElemType &e){ if(S.top<=S.base
) return -1; e = * --S.top; return 1; } int GetTop(SqStack S,SElemType &e){ if(S.top<=S.base) return -1; e = * (S.top-1); return 1; } int StackEmpty(SqStack S){ if(S.base == S.top) return 1; else return 0; } int main() { cout << "進位制轉換程式" << endl; SqStack S; InitStack(S); int n,m; cout << "請輸入一個整數" << endl; scanf("%d",&n); cout << "請輸入進位制,用整數表示" << endl; scanf("%d",&m); while(n) { Push(S,n%m); n = n/m; } int e; while(!StackEmpty(S)) { Pop(S,e); printf("%d",e); } return 0; }

測試結果:
這裡寫圖片描述