栈的实现(C语言)
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
最近翻看大学时候的资料,发现了当时写的C语言栈的简单实现,分享一下,有问题的地方希望慷慨指出,共同学习。
代码结构如下:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//节点数据类型定义
typedef struct Node
{
int data;
struct Node * next;
}NODE,* PNODE;
//栈数据类型定义
typedef struct Stack
{
PNODE top;
PNODE base;
}STACK,* PSTACK;
/*函数声明*/
void InitStack(PSTACK S); //初始化栈
void PushStack(PSTACK S,int val); //压栈
void PopStack(PSTACK S,int &val); //出栈
void TraverseStack(PSTACK S); //遍历栈
//测试函数
int main(void)
{
int pop,n,i,push; //pop代表出栈的值,push代表压栈的值,
//n为用户选择要压栈的个数i用于迭代
STACK S;
InitStack(&S);
printf("你想在栈中压入多少个整数值? ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
do
{
}while(getchar()!='\n'); //获取用户多余的输入
printf("请输入值:");
scanf("%d",&push);
PushStack(&S,push);
}
printf("栈中元素的遍历结果:");
TraverseStack(&S);
for(i=0;i<n;i++)
{
PopStack(&S,pop);
printf("出栈的是:%d\n",pop);
}
return 0;
}
代码下载地址:完整代码