结点形式:
//结点
typedef struct node {
int data; //数据
struct node * pNext;
}NODE, * PNODE;
//栈
typedef struct stack {
PNODE pTop;
PNODE pButtom;
}STACK,* PSTACK;
头文件:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
操作函数:
//栈的初始化函数
void init_stack (PSTACK pS) {
pS->pTop = (PNODE)malloc (sizeof(NODE));
if (NULL == pS->pTop)
{
printf ("内存分配失败!\n");
exit (-1);
}
else
{
pS->pButtom = pS->pTop;
pS->pTop->pNext = NULL;
printf ("初始化成功!\n");
}
}
//入栈函数
void push_stack (PSTACK pS, int val)
{
PNODE pNew = (PNODE)malloc (sizeof (NODE));
pNew->data = val;
//新的结点的指针域指向前一个结点
pNew->pNext = pS->pTop;
//使pTop始终指向最上面一个结点
pS->pTop = pNew;
return;
}
//栈的遍历
void traversal_stack (PSTACK pS)
{
if (empty_stack (pS)) {
return;
} else {
PNODE p = pS->pTop;
while (p != pS->pButtom) {
printf ("%d", p->data);
p = p->pNext;
}
printf ("\n");
printf ("遍历结束!\n");
return;
}
}
//出栈函数
bool pop_stack (PSTACK pS, int * val)
{
if (empty_stack (pS))
{
printf ("栈为空,出栈失败!\n");
return false;
}
else
{
PNODE p = pS->pTop;
pS->pTop = pS->pTop->pNext;
*val = p->data;
printf ("您所压出栈的数值为%d:\n", *val);
free (p);
p = NULL;
return true;
}
}
//判断栈是否为空的函数
bool empty_stack (PSTACK pS)
{
if (pS->pButtom == pS->pTop)
{
return true;
}
else
{
return false;
}
}
void clear_stack (PSTACK pS)
{
//先判断栈是否为空,提高效率
if (empty_stack (pS))
{
return;
}
else
{
PNODE p = pS->pTop;
while (p != pS->pButtom)
{
PNODE q = p;
p = p->pNext;
free (q);
}
pS->pTop = pS->pButtom;
return;
}
}
测试主函数:
int main (void) {
STACK s;
int val;
init_stack (&s);
push_stack (&s, 1);
push_stack (&s, 2);
push_stack (&s, 3);
push_stack (&s, 4);
push_stack (&s, 5);
traversal_stack (&s);
if (pop_stack (&s, &val))
{
printf ("出栈数值为:%d\n", val);
}
traversal_stack (&s);
clear_stack (&s);
traversal_stack (&s);
return 0;
}
运行结果: