栈可以看成是一个先进后出的容器,一个有底无盖的杯子。第一个入栈的数据先进去栈底,接下来入栈的在第一个上面,以此类推下去。这里我们所说的是简单的用户自定义栈
一、 链式栈
我们依旧先要定义一个结构体,来表示链表的节点
typedef struct Node
{
int data; //数据域
struct Node * pNext; //指针域
}NODE, * PNODE;
接下来我们仍旧需要定义一个结构体,这个结构体用来表示两个指针。一个始终指向栈底,一个始终指向栈顶,这样会便于我们对栈进行一些操作。而这两个指针都应该是指向某个节点的,所以我们应该这样写
typedef struct stack
{
PNODE pTop; //始终指向栈顶
PNODE pBottom; //始终指向栈底
}STACK, * PSTACK;
这样我们就相当于建立了一个空间,这个空间有两部分一个是pTop,一个是pBottom;
准备工作就绪,接着我们先对栈进行初始化操作。
void init_stack(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE)); //为pTop分配空间,使其指向一个空节点