0\0\ 300 8	?KOG8	?KOG
 0′?U?4?1?Y??
l ü,XVé?,|4§X	?J
? ?0
l Kó?,XVé?,|4§X	?J
? ?0
l üaKó?,Xh*ü_
E??E??
3.1 ü
3.2 Kó?
3.1 üü
3.1.1 ü,Xn
ü?/?(M!^,X4??><?J(M!^?übL$n|9
`?L8DB2?,X?0	?6?ü4??><,X?0?Eˉ> ?V
?/?
Eˉ> |9
`?L8,X?0?#B|0?èE?>/? ü
NJ èJ*ü?t  3üNJ?J\  ′?/×5à	o?0??n0?è
E?>/? üi ??à4£úü*ü?ò 3-1,X6?£
E??
a1,    a2,    a3,  ...,    an |9
`?L80?
an
...
a2
a1
üNJ t op
ò 3-1
4§A?? 	aEˉ? ? Last In First Out?è1T/?
LIFO4??><?
_ 1??G?	×OA,X.kèE?ü"?F?	a?t?t
:ü?CK,èüS*üêè81?t?t
óè?n
?óCD?TM6,XFw	?.kè5à?	aó???M6,XFw	?
.k?
_ 2?ü?1%1
TèS*ü,X-ê
+¢iTT?
?
-?èüS*üêèú¢?TM6??
ó
	a?
?M6?à4-?ü4§X,X
? ?0?
? 1???êü InitStack(S)
? 2?9ü Push(S,item)
? 3??ü Pop(S,item)
? 4?9?	aüNJ2?Y? GetTop(S,item)
? 5???ü	ú0N StackEmpty(S)
3.1.2 ü,XNNc,|
ü,XNNc,|4§X*ü?4?E24á,X,|	)q ?
,ü,X!£tDB2?èJ*üCK?0?0üi?
2O
_nV?/?
#define MAX_STACK  10
//ü,X??DB2?D,?
typedef struct stack{
StackEntry item[MAX_STACK];
//,üDB2?,X,|	)
int top;                          //üNJ?J}STACK;
? ?01k"??
1. ??êü S
void InItStack(STACK *S)
{    s->top=-1;   }
2. 9ü
void Push(STACK *S,StackEntry item)
{
if (S->top==MAX_STACK-1) exit( 3Stack is full ′);
else S->item[++S->top]=item;
}
ò 3-2
MAX_STACK-1
...
1
0
top= -1
3. ?ü
void Pop(STACK *S,StackEntry *item)
{
if (StackEmpty(*S))  exit( 3Stack is empty ′);
else *item=S->item[S->top--];
}
4. 9?	aüNJ2?Y?
void GetTop(STACK S,StackEntry *item)
{
if (StackEmpty(S)) exit( 3Stack is empty ′);
else *item=S.item[S.top];
}
5. ??ü S	ú0N
int StackEmpty(STACK S)
{
if (S.top==-1) return TRUE;
else FALSE;
}
4§A??+bü,X|9
`?L8?0KYW,X(M!^
?è1*üNNc,|4§X></,XüJá,ü|9?L8
DB2?êL??U/?|,XK?Nlèü?G£L?1=,X
&??"uY7?
3.1.3 ü,XJò?,|
81ü2?,XD,?	?ê8×èEW?êá#ù.ü2?
,XD,?èhA15×<%S*üJò?,|4§X??àú*üJò
?,|4§X></,Xü/?0  3Jòü  ′?JòüE?*ü?t′
4§&?,X	)Jò><></?Vò 3-3/?
+bü,X|9?L8?0	?6?ü?0?Eˉ> è5àíb
	)Jò><9AèèüOj0?|9?L84§&??U!¨0?,ìí
?
??oè1è?àú	)Jò><,XOj0?0üNJ0?è	G
ú	)Jò><,X?J\0üNJ?J\?
^
top
ò 3-3
ü,XJò?,|4§Xü CAá??	?*ü??2O
_nr
)??
type struct node {    //Jòü,X4§&?4§X
StackEntry item;  //ü,XDB2?2O
_
struct node *next;  //?	?	a4?4§&?,X?J}NODE;
typedef struct stack{
NODE *top;
}STACK;
?M6?àú4-?Jòü	?NM
? ?0,X1k"??
1. ??êü S
void InitStack(STACK *S)
{
S->top=NULL;
}
2. 9ü
void Push(STACK *S,StackEntry item)
{
p=(NODE*)malloc(sizeof(NODE));
if (!p) exit(OVERFLOW);
else { p->item=item;
p->next=S->top;
S->top=p;
}
}
3. ?ü
void Pop(STACK*S, StackEntry *item)
{
if (StackEmpty(*S)) exit( 3Stack is empty ′);
else {
*item=S->top->item;
p=S->top;
S->top=p->next; free(p);
}
}
4. 9?	aüNJ2?Y?
void GetTop(STACK S,StackEntry *item)
{
if (StackEmpty(S)) exit( 3Stack is empty ′);
else *item=S.top->item;
}
5. ??ü S	ú0N
int StackEmpty(STACK S)
{
if (S.top==NULL) return TRUE;
else FALSE;
}
3.1.4 ü,Xh*ü_
?_ Dú¢K,?Eg9,X+0úc?Eú5BEg?
!¨Vè¢K,?TEg9? tset a si sihT×1k"?úEg
?? This is a test
?M6?à4-??·?E-tK?Nl,X`H1k"??
typedef char StackEntry;
void ReverseRead( )
{
STACK S;                //n?tü4§X S
char ch;
InitStack(&S);             //??êü
while ((ch=getchar())!= ?\n ?)
//¢K,?Eg9+0úè,èEg96> 0ú!6
Push(&S ,ch);
//úEg9,X!£t+0ú9ü
while (!StackEmpty(S)) {
//q ?E?üJEg?E??,X+0ú
Pop(&S,&ch);
putchar(ch);
}
putchar( μ\n ?);
}
?_ D	Eˉ
DE@6?`Eˉ
S*ü)E@,ìL8"?ú?t	Eˉ
DE@6?`Eˉ
D?	G*üA1	Eˉ
DL81 2èJ±+-J-D×G?á
!8?0è,èA1	Eˉ
D 0!6??	aúY,X-
D	?	?Eg?íh,X`Eˉ
D?
!¨V? (692)10 = (1010110100)2èJ)E@,ìL8,XE?/?
Vò 3-4/?
ò 3-4
L8D >L8D -
D
2
692
2 346 0
2 173 0
2 86 1
2 43 0
2 21 1
2 10 1
25 0
22 1
21 0
0 1
?M64-??·?E-tK?Nl,X`H1k"??
void Decimal _ Binary ( )
{
STACK S;        //nü4§X S
InitStack(&S);    //??êü S
scanf( 3%d ′,data);  //Eg9	Eˉ
!7HD
while (data) {
Push(&S,data%2);     //-D9ü
data/=2;
//>L8D dataHL81 2èk?,X>L8D
}
while (!StackEmpty(S)) {
//q ?¢ü
?!£?t-DèJEg?
Pop(&S,&data);
printf( 3%d ′,data);
}
}
?_ D?P`><E??,Xà	?	
G!??
A?ü?t1k><E??è	?1ù	?Y/?à	??
úà	?  3?  ′
`  3?  ′è?à	?  3 >
