1. 程式人生 > >順序棧的幾個基本操作 壓棧 彈出 數制轉換 等等

順序棧的幾個基本操作 壓棧 彈出 數制轉換 等等

// 順序棧.cpp: 定義控制檯應用程式的入口點。 //

#include "stdafx.h" #include"stdlib.h" #define STACK_INIT_SIZE 100 #define STACKINCREAMENT 10 typedef int elem;

typedef struct {     elem *base;     elem *top;     int stacksize; }SqStack;

SqStack s; void InitStack(SqStack * S) {     S->base = (elem *)malloc(STACK_INIT_SIZE * sizeof(elem));//建立一個連續的  長度為100個整形的棧     S->stacksize = STACK_INIT_SIZE;

    S->top = S->base;//棧剛開始為空  棧頂指標和棧底指標指向一樣

}

void Push(SqStack *S,elem e) {     if (S->top - S->base >= S->stacksize) {//如果長度超出100  重新開闢十個長度連在後面         S->base = (elem *)realloc(S->base, (S->stacksize + STACKINCREAMENT) * sizeof(elem));         if (!S->base)    exit(-2);         printf("STACK---PUSH---SUCCESS\n\n");         S->top = S->base + S->stacksize;         S->stacksize += STACKINCREAMENT;     }          *(S->top)=e;//將你想賦的值賦進去     S->top = S->top++;//棧頂指標往後推一個 }

void Pop(SqStack *S,elem *e) {     if (S->top == S->base) {         printf("棧目前為空\n");         exit(0);     }

    S->top--;//棧頂指標回退一個     *e = *S->top;//將棧的最後一個值提出來 }

int StackEmpty(SqStack *S) {     if (S->top - S->base == 0) {         printf("棧為空");         return 0;     }     return 1; }

elem StackLength(SqStack *S) {     return S->top - S->base; }

void Numerical_conversion(int num,int Decimal) {//數值轉換       if (num < 0) {         printf("-");         num = -num;     }//如果數值是負的  先輸出一個-     while (num!=0) {         Push(&s,num%Decimal);         num /= Decimal;     }//將餘數壓棧     int stackLength = StackLength(&s);

    for (int i = 0; i < stackLength; i++) {         int num;         Pop(&s, &num);         printf("%d", num);     }//將棧中的數依次彈出     printf("\n"); }

int main() {     InitStack(&s);     Numerical_conversion(10, 2);          /*for (int i = 1; i < 101; i++) {         Push(&s, i);     }     Push(&s, 1);*/     /*printf("%d\n", StackLength(&s));     int num;     Pop(&s, &num);     printf("%d\n",num);*/     return 0; }