说明:
书中已有关于顺序栈的类型定义、栈初始化、入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作。
1.程序功能
通过使用栈来编写一个程序,实现两个数的交换。
2.程序代码及注释
代码及注释如下:
#include#include //导入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;}
3.程序执行
程序执行结果如下:
Please enter x:30Please enter y:40x=40y=30