顺序栈的定义与基础操作


#include <stdio.h>
#include <stdlib.h>

#define MaxSize 10
#define bool char
#define True 1
#define False 0

typedef int ElemType;

// 顺序栈类型定义
typedef struct stack {
    ElemType data[MaxSize];
    int top;
} SeqStack;


void init(SeqStack *s) {
    s->top = -1;
};

bool is_empty(SeqStack *s) {
    if (s->top == -1) {
        return True;
    } else {
        return False;
    }
}

bool is_full(SeqStack *s) {
    if (s->top == (MaxSize - 1)) {
        return True;
    } else {
        return False;
    }
}

void push(SeqStack *s, ElemType x) {
    if (is_full(s)) {
        printf("栈以满!");
        exit(1);
    } else {
        s->top++;
        s->data[s->top] = x;
    }
}

ElemType pop(SeqStack *s) {
    if (is_empty(s)) {
        printf("栈为空!");
        exit(1);
    }
    ElemType x = s->data[s->top];
    s->top--;
    return x;
}

ElemType get_top(SeqStack *s) {
    if (is_empty(s)) {
        printf("栈为空!");
        exit(1);
    }
    ElemType x = s->data[s->top];
    return x;
}

int main() {
    SeqStack s;
    init(&s);
    for (int i = 0; i < MaxSize; i++) {
        push(&s, i);
    }
    printf("top = %d\n", get_top(&s));
    for (int j = 0; j < MaxSize; j++) {
        printf("%d\n", pop(&s));
    }
    return 0;
}
// 使用顺序栈将一个十进制整数m转换为n进制数输出函数
void transform(int m, int n) {
    int k; // 保存余数
    int mm = m; // 保存十进制数
    SeqStack s;
    init(&s);
    while (m != 0) {
        k = m % n;   /*将十进制数m除以n进制数的余数存入k*/
        if (k < 10) {
            k += '0';
        } else {
            k = k - 10 + 'A';
        }
        push(&s, k); /*将k的值进栈中*/
        m = m / n;     /*用m除以n的整数商又赋给m*/
    }
    printf("十进制数 %d 转换为 %d 进制数为:", mm, n);
    if (mm == 0)printf("0");
    while (!is_empty(&s)) {    /*元素依次出栈 */
        k = pop(&s);
        printf("%c", k);
    }
    printf("\n");
}