1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <math.h>
4
5 #define STACK_INIT_SIZE 10
6 #define STACKINCREMENT 2
7 #define OK 1;
8 #define FALSE 0;
9
10 typedef int Status;
11 typedef int SElemType;
12
13
14 typedef struct SqStack
15 {
16 SElemType *base;
17 SElemType *top;
18 int stacksize;
19 }SqStack;
20
21 Status InitStack(SqStack *S)
22 {
23 (*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
24 if(!(*S).base)
25 exit(OVERFLOW);
26 (*S).top = (*S).base;
27 (*S).stacksize = STACK_INIT_SIZE;
28 }
29
30 Status Push(SqStack *S,SElemType e)
31 {
32 if((*S).top - (*S).base >= (*S).stacksize)
33 {
34 (*S).base = (SElemType *)realloc((*S).base,((*S).stacksize + STACKINCREMENT) * sizeof(SElemType));
35 if(!(*S).base)
36 exit(OVERFLOW);
37 (*S).top = (*S).base + (*S).stacksize;
38 (*S).stacksize += STACKINCREMENT;
39 }
40 *((*S).top)++ = e;
41 return OK;
42 }
43
44 Status StackEmpty(SqStack *S)
45 {
46 if ((*S).base == (*S).top)
47 return OK;
48 return FALSE;
49 }
50
51 Status Pop(SqStack *S,SElemType *e)
52 {
53 if ((*S).base == (*S).top)
54 return FALSE;
55 *e = *--(*S).top;
56 return OK;
57 }
58 void conversion()
59 {
60 SqStack S;
61 SElemType N;
62 SElemType e;
63 InitStack(&S);
64 printf("请输入十进制数:");
65 scanf("%d",&N);
66 printf("%d转换为8进制为:",N);
67 while (N)
68 {
69 Push(&S,N % 8);
70 N = N / 8;
71 }
72 while (!StackEmpty(&S))
73 {
74 Pop(&S,&e);
75 printf("%d",e);
76 }
77 printf("\n");
78 }
79
80 void main(void)
81 {
82 conversion();
83 }