#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");
}