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