PS:数据结构 48页栈的应用
十进制转换八进制
自己写了下。供大家参考,通过源码进一步学习数据结构。
此书全部给出算法思想
要自己多动手敲敲code,不能光看不敲,那是没用的,给你思路,你也照样写不出来
要做一个合格的程序员就努力的写代码。通过代码量反映你的能力
//
利用栈实现进制间的转换
#include
<
stdio.h
>
#include
<
stdlib.h
>
//
#include<malloc.h>
#include
<
conio.h
>
#define
STACK_INIT_SIZE 100
#define
STACKINCREMENT 10
typedef
struct
{
int
*
base
;
int
*
top;
int
stacksize;
}SqStack;
int
InitStack(SqStack
&
S)
//
构造空栈
{
S.
base
=
(
int
*
)malloc(
sizeof
(
int
)
*
(STACK_INIT_SIZE));
if
(
!
S.
base
) exit(
–
1
);
S.top
=
S.
base
;
S.stacksize
=
STACK_INIT_SIZE;
return
1
;
}
int
Push(SqStack
&
S,
int
e)
//
压栈
{
if
(S.top
–
S.
base
>=
S.stacksize)
{
S.
base
=
(
int
*
)realloc(S.
base
,
sizeof
(
int
)
*
(STACK_INIT_SIZE
+
STACKINCREMENT));
if
(
!
S.
base
) exit(
–
1
);
S.top
=
S.
base
+
S.stacksize;
S.stacksize
+=
STACKINCREMENT;
}
*
S.top
++
=
e;
return
1
;
}
int
StackEmpty(SqStack S)
//
查看栈是否为空
{
if
(S.
base
==
S.top)
return
1
;
else
return
0
;
}
int
Pop(SqStack
&
S,
int
&
e)
//
出栈
{
if
(S.top
==
S.
base
)
return
0
;
e
=
*–
S.top;
return
1
;
}
void
conversion()
//
将十进制用栈转化为八进制
{
SqStack S;
int
N;
int
e;
InitStack(S);
printf(
“
输入N的值:
“
);
scanf(
“
%d
“
,
&
N);
printf(
“
转换后的值:
“
);
while
(N)
{
Push(S, N
%
8
);
N
=
N
/
8
;
}
while
(
!
StackEmpty(S))
{
Pop(S,e);
printf(
“
%d
“
,e);
}
}
void
main()
{
conversion();
getch();
}