您的位置:首页 > 理论基础 > 数据结构算法

数据结构基础之栈

2016-02-06 13:07 429 查看
栈:遵行先进后出

对栈的数据结构的定义保存在SeqStack.h中,代码如下:

#define StackSize 100
typedef struct
{//线性
DataType stack[StackSize];
int top;
}SeqStack;

void InitStack(SeqStack *s)
{//初始化栈
s->top=0;
}
int StackEmpty(SeqStack s)
{//判断栈是否为空,为空返回1,否则返回0
if(s.top==0)
return 1;
else
return 0;
}

int GetTop(SeqStack s,DataType *e)
{//取栈顶元素,将栈顶元素返回给e,1成功,0失败
if(s.top<=0)
{
printf("栈已空!\n");
return 0;
}
else
{
*e=s.stack[s.top-1];
return 1;
}
}

int PushStack(SeqStack *s,DataType e)
{//将元素e压栈,成功返回1,否则为0
if(s->top>=StackSize)
{
printf("栈已满!\n");
return 0;
}
else
{
s->stack[s->top]=e;  //元素e进栈
s->top++;
return 1;
}
}

int PopStack(SeqStack *s,DataType *e)
{//出栈
if(s->top==0)
{
printf("站中无元素\n");
return 0;
}
else
{
s->top--;
*e=s->stack[s->top];  //元素e出栈
return 1;
}
}

int StackLength(SeqStack s)
{//求栈的长度
return s.top;
}

void ClearStack(SeqStack *s)
{
s->top==0;
}
利用顺序栈,将元素A,B,C,D,E,F依次进栈,然后将F和E出栈,再将G和H进栈,最后全部元素出栈,代码如下:

#include"stdio.h"
#include"stdlib.h"
typedef char DataType;
#include"SeqStack.h"
void main()
{
SeqStack s;
int i;
DataType a[]={'A','B','C','D','E','F'};
DataType e;
InitStack(&s);
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
if(PushStack(&s,a[i])==0)
{
printf("栈已满");
return;
}
}
printf("出栈依次元素是:");
if(PopStack(&s,&e)==1)
printf("%4c",e);  //F出栈
if(PopStack(&s,&e)==1)
printf("%4c",e);  //E出栈
printf("\n");
printf("当前的栈顶元素是:");
if(GetTop(s,&e)==0)
{
printf("栈已空");
return;
}
else
printf("%4c\n",e);
printf("将元素G、H依次进栈\n");//G进栈
if(PushStack(&s,'G')==0)
{
printf("栈已满");
return;
}
if(PushStack(&s,'H')==0)//H进栈
{
printf("栈已满");
return;
}
printf("当前栈中的元素个数是:%d\n",StackLength(s));
printf("元素出栈\n");
while(!StackEmpty(s))
{
PopStack(&s,&e);
printf("%4c",e);
}
printf("\n");
}
参考:《数据结构》——陈锐
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: