2016年7月23日13:32:21
需求:利用顺序栈的基本操作,将元素A,B,C,D,E,F依次进栈,
然后将F和E出栈,
再将G和H进栈,
最后将元素全部出栈;
依次输入出栈的元素;
#include <stdio.h>
#define STICKSIZE 100
typedef char DataType;
typedef struct
{
int stick[STICKSIZE];
int top;
}SeqStick;
void initStick( SeqStick * s);
int isEmpty(SeqStick * s);
int isFull(SeqStick * s);
int pushStick(SeqStick * s,DataType element);
int popStick(SeqStick * s,DataType * element);
int getTop(SeqStick * s,DataType element);
void traverseStick(SeqStick * s);
int getLength(SeqStick * s);
void destroyStick(SeqStick * s);
void initStick( SeqStick * s)
{
s->top = -1;
return ;
}
int isEmpty(SeqStick * s)
{
if(-1 == s->top)
return 1;
else
return 0;
}
int isFull(SeqStick * s)
{
if(STICKSIZE == s->top)
return 1;
else
return 0;
}
int getLength(SeqStick * s)
{
return s->top+1;
}
int pushStick(SeqStick * s,DataType element)
{
if(isFull(s))
return 0;
else
{
s->top++;
s->stick[s->top] = element;
return 1;
}
}
int popStick(SeqStick * s, DataType * val)
{
if(isEmpty(s))
return 0;
else
{
*val = s->stick[s->top];
s->top--;
return 1;
}
}
int getTop(SeqStick * s,DataType * element)
{
if(isEmpty(s))
return 0;
else
{
*element = s->stick[s->top];
return 1;
}
}
void destroyStick(SeqStick * s)
{
s->top = -1;
}
void traverseStick(SeqStick * s)
{
int i;
for ( i = 0;i<=s->top;i++)
{
printf("%d ",s->stick[s->top]);
}
printf("\n");
return;
}
int main(void)
{
int i;
SeqStick s;
DataType val;
DataType a[] = {'A','B','C','D','E','F'};
initStick(&s);
for(i = 0;i<sizeof(a)/sizeof(a[0]);i++)
{
if(!pushStick(&s,a[i]))
{
printf("栈已满,无法继续进栈!\n");
return 0;
}
}
printf("出栈的元素为:\n");
if(popStick(&s,&val))
{
printf("%3c",val);
}
if(popStick(&s,&val))
{
printf("%3c",val);
}
if(!pushStick(&s,'G'))
{
printf("栈已满,无法继续进栈!\n");
return 0;
}
if(!pushStick(&s,'H'))
{
printf("栈已满,无法继续进栈!\n");
return 0;
}
printf("将栈中的元素全部出栈!\n");
while(!isEmpty(&s))
{
if(popStick(&s,&val))
{
printf("%3c",val);
}
}
printf("\n");
return 0;
}