顺序栈
#include<stdio.h>
#include<stdlib.h>
#define max_size 10
//抽象数据类型
typedef struct stack{
int *a;
int top;
} stack;
//判空
int Empty(stack *L){
return (L->top == -1);
}
//判满
int Full(stack *L){
return (L->top == max_size);
}
//初始化栈
void initStack(stack *L){
L->a = (int *)malloc(sizeof(int) * max_size);
L->top = -1;
}
//入栈
int push(stack *L,int elem){
L->a[(++L->top)] = elem;
}
//出栈/输出
int pop(stack *L){
int length = L->top+1;
if(Empty(L)){
printf("Error\n");
return 1;
}
for(int i=0;i<length;i++){
printf("%5d",L->a[(L->top--)]);
}
printf("\n");
return 0;
}
//十六进制进制输出
int pop_change(stack *S){
int length = S->top+1;
int j = 0;
if(Empty(S)){
printf("Error\n");
return 1;
}
for(int i=0;i<length;i++){
if(S->a[S->top] == 10) printf("A");
else if(S->a[S->top] == 11) printf("B");
else if(S->a[S->top] == 12) printf("C");
else if(S->a[S->top] == 13) printf("D");
else if(S->a[S->top] == 14) printf("E");
else if(S->a[S->top] == 15) printf("F");
else printf("%d",S->a[S->top]);
S->top--;
}
printf("\n");
return 0;
}
//进制转换
int change(int n,int m){
stack S;
initStack(&S);
while(n != 0){
push(&S,n%m);
n = n/m;
}
if(m<9) pop(&S);
else pop_change(&S);
return 0;
}
int main(){
stack L;
initStack(&L);
if(Full(&L)) return 0;
if(Empty(&L)){
for(int i = 0;i<max_size; i++){
push(&L,i);
}
}
pop(&L);
change(3456,16);
}
/*
int change(stack *S,int n,int m){
while(n != 0){
S->a[(++S->top)] = n%m;
n = n/m;
}
return 0;
}
*/