C语言栈的各种基本运算代码
题目:
实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成如下功能:
(1)初始化栈S;
(2)判断栈S是否为空;
(3)依次使元素a, b, c, d, e进栈;
(4)判断栈S是否为空;
(5)输出栈的长度;
(6)输出从栈顶到栈底元素;
(7)输出出栈序列;
(8)判断顺序栈S是否为空;
(9)释放栈
代码;
#include
#include
#define MaxSize 50
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //栈顶指针
}SqStack;
//顺序栈顶类型定义
//初始化栈
void InitStack(SqStack* &s)
{
s=(SqStack*)malloc(sizeof(SqStack));
s->top=-1;
}
//销毁栈
void ClearStack(SqStack *&s)
{
free(s);
}
//求栈的长度
int StackLength(SqStack *s)
{
return(s->top+1);
}
//判断栈是否为空
int StackEmpty(SqStack *s)
{
return(s->top==-1);
}
//进栈
int Push(SqStack *&s,ElemType e)
{
if(s->top==MaxSize-1)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
//出栈
int Pop(SqStack *&s,ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}
//取出栈顶元素
int GetTop(SqStack *s, ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
return 1;
}
//显示栈中元素
void DispStack(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
printf("%c ",s->data[i]);
printf("\n");
}
int main()
{
ElemType e;
SqStack *s;
printf(" 初始化栈s\n ");
InitStack(s);
printf( "栈S为%s\n ", (StackEmpty(s)? "空 ": "非空 "));
printf("一次进栈元素a,b,c,d,e;\n");
Push(s,'a');
Push(s,'b');
Push(s,'c');
Push(s,'d');
Push(s,'e');
printf(" 栈S为%s\n ", (StackEmpty(s)? "空 ": "非空 "));
printf("输出栈长度S=%d:\n",StackLength(s));
printf(" 输出从栈顶到栈底的元素:");
DispStack(s);
GetTop(s,e);
printf(" 显示栈顶元素:%c",e);
printf("\n");
printf(" 输出出栈序列:");
while (!StackEmpty(s))
{
Pop(s,e);
printf("%c",e);
}
printf("\n");
printf(" 栈S为%s\n ",(StackEmpty(s)? "空 ": "非空 "));
printf("销毁栈\n");
ClearStack(s);
return 0;
}