数据结构中的栈是什么
举一个简单的例子:在往箱子里面放衣物的时候,放在最上面的衣物总是我们最后放上去的;而当我们从箱子里取出衣物的时候,总是最先拿出上面的。这就是现实生活中的栈。
准确的讲,栈就是一种可以实现“先进后出(或者叫后进先出)”的存储结构。
学过数据结构的人都知道:栈可以用两种方式来实现,一种方法是用数组实现栈,这种栈成为静态栈;另外一种方法是用链表实现栈,这种栈叫做动态栈。
栈中通常存放着程序的局部变量等。栈通常有出栈和入栈操作。
栈的结构
空栈的结构:【其实就是栈顶和栈顶都指向一个无用的头结点】
存有结点的栈结构:【栈顶指针指向栈顶结点,栈底指针指向头结点】
栈的实现
下面是用C实现的一个栈结构的源码及详细注释:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//定义结点结构体
typedef struct Node
{
} NODE, * PNODE;
//定义栈的结构体
typedef struct Stack
{
} STACK, * PSTACK;
//函数声明
void initStack(PSTACK pStack);
void pushStack(PSTACK pStack, int val);
bool popStack(PSTACK pStack, int * pVal);//出栈的函数,*pVal用来保存出栈的元素内容
void traverseStack(PSTACK pStack);
bool isEmpty(PSTACK pStack);
void clearStack(PSTACK pStack);
int main(void)
{
}
void initStack(PSTACK pStack)
{
}
void pushStack(PSTACK pStack, int val)
{
}
bool popStack(PSTACK pStack, int * pVal)
{
}
void traverseStack(PSTACK pStack)
{
}
bool isEmpty(PSTACK pStack)
{
}
void clearStack(PSTACK pStack)
{
}
栈的典型应用
生产消费模型常用栈来实现。生产者生产的东西都放入栈中,然后消费者从栈中依次取出东西,当栈顶和栈底指向都指向首结点时,生产的东西就被消耗光了。
文章摘自 http://blog.sina.com.cn/s/blog_6975d67c01013jm7.html