【数据结构之旅】顺序栈入门操作

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




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,如需转载请自行联系原作者

上一篇:【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行 ( 定义连接点注解 | 定义 Aspect 切面 | 定义切入点 | 逐个处理切入点的各个连接点 )(二)


下一篇:什么叫编译时和运行时