# include <stdio.h>
# include <stdlib.h> //导入stdlib.h模块是为了使用sizeof函数
typedef struct{ //定义栈Stack的类型
int *base;
int top;
int stack_size;
} Stack;
int InitStack(Stack &S, int size){ //初始化栈
S.base = ( int *)malloc(size * sizeof( int )); //开辟一段地址,并把首地址赋给S.base
if (S.base == NULL) return 0 ; //如果地址开辟失败,就返回0
S.top = 0 ; //S.top为0,表示此时栈为空栈
S.stack_size = size; //记录栈的大小,这里为可以存放size个int类型的数据
return 1 ; //初始化栈成功,返回1
}
int Push(Stack &S, int e){ //入栈操作
S.base[S.top] = e; //此时S.top为0,让S.base地址块的首地址存放数据e
S.top++; //让S.top指向下一个开辟的地址
return 1 ; //数据入栈成功,返回1
}
int Pop(Stack &S){ //出栈操作
if (S.top == 0 ) //S.top为0,表示指向栈的开始,即数据已全部出栈
return 0 ;
S.top--; //未全部出栈,让S.top减1,使S.base可以指向前1个数据
return S.base[S.top]; //返回数据
}
int exchange( int x, int y){
Stack S; //定义一个新栈(本质为结构体)
InitStack(S, 3 ); //初始化栈,并且栈的大小为3
Push(S, x); //把x压入栈
Push(S, y); //把y压入栈
x = Pop(S); //出栈
y = Pop(S); //出栈
printf( "x=%d\ny=%d\n" , x, y);
return 1 ;
}
int main( void )
{
int x, y;
printf( "Please enter x:" );scanf( "%d" ,&x);
printf( "Please enter y:" );scanf( "%d" ,&y);
exchange(x, y);
return 0 ;
}
|