说明:

    书中已有关于顺序栈的类型定义、栈初始化、入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作。


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