主题:求高手教一下栈是怎么回事。。。。。
ccmike98
[专家分:80] 发布于 2010-10-22 22:43:00
我们离散数学的实验,求一个逻辑表达式的真值表。
里面会用到栈,但是我对栈不是很了解,
希望有人教一下,然后举几个例子,说明怎么用的,
说一下关于栈的函数。
急需,谢谢
回复列表 (共3个回复)
沙发
eastcowboy [专家分:25370] 发布于 2010-10-23 00:52:00
栈可以看成是一种容器,你可以把一些东西放到这个容器中,然后再取出来,但必须遵守一个规则:先方进去的东西一定后被取出来,后放进去的东西一定先被取出来。
想象你有一个竹筒,若干的豆子,豆子的直径只比竹筒的口径小一点点,这样一来,如果你把豆子装进竹筒里,则先进去的豆子一定后出来,后进去的豆子一定先出来。这里,竹筒酒相当于“栈”,豆子就相当于“栈”里面的元素。
“栈”的基本操作有两种:入栈和出栈。入栈就是把一个元素加入到栈之中,出栈就是把最后一个进入到栈之中的元素取出来。根据实际情况,可能还需要一些辅助操作,比如:判断栈之内目前存放了多少个元素。
用C语言的话,简单情况下,可以用一个数组来当作栈。
#define STACK_MAX_SIZE 100 // 假设栈最多可以容纳100个元素
int stack[STACK_MAX_SIZE]; // 用数组来做一个栈
int stack_size = 0; // 开始时,栈之内的元素数目为零
如果需要把一个元素加入到栈之内,可以这样写:
stack[stack_size] = k;
++stack_size;
(其中k是即将被加入到栈之内的元素)
注意:因为是用数组来做,所以最多只能有STACK_MAX_SIZE个元素,超过这个限制,程序就会出错了。
如果需要把栈之内的最后一个元素取出,可以这样写:
--stack_size;
k = stack[stack_size];
(其中k是从栈之内取出的元素)
注意:如果栈里面一个元素也没有,也就是stack_size为零,此时是无法取出任何元素的。从代码上看,k = stack[stack_size];这句stack_size等于-1,程序会出错。
板凳
ccmike98 [专家分:80] 发布于 2010-10-23 10:42:00
谢谢,挺细的
3 楼
阿尔萨斯 [专家分:10] 发布于 2010-10-23 15:56:00
数据结构里有。。。
我来回复