/**
* 实验题目:
* 实现顺序栈各种基本运算的算法
* 实验内容:
* 编写程序,实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
* (1)初始化栈s
* (2)判断栈s是否非空
* (3)依次进栈元素a,b,c,d,e
* (4)判断栈s是否非空
* (5)输出栈长度
* (6)输出从栈顶到栈底元素
* (7)输出出栈序列
* (8)判断栈s是否非空
* (9)释放栈
*/
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; // 栈指针
}SqStack;
/*------------------------初始化栈s-------------------------*/
void InitStack(SqStack *&s)
{
s = (SqStack *)malloc(sizeof(SqStack));
s->top = -1;
}
/*------------------------释放栈s-------------------------*/
void ClearStack(SqStack *&s)
{
free(s);
}
/*------------------------求栈s的长度-------------------------*/
int StackLength(SqStack *s)
{
return (s->top + 1);
}
/*------------------------判断栈s是否为空栈-------------------------*/
int StackEmpty(SqStack *s)
{
return (s->top == -1);
}
/*------------------------进栈元素e-------------------------*/
int Push(SqStack *&s, ElemType e)
{
if(s->top == MaxSize - 1)
return 0;
s->top++;
s->data[s->top] = e;
return 1;
}
/*------------------------出栈一个元素e-------------------------*/
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(void)
{
ElemType e;
SqStack *s;
printf("(1)初始化栈s\n");
InitStack(s);
printf("(2)栈为%s\n", (StackEmpty(s) ? "空" : "非空"));
printf("(3)依次进栈元素a,b,c,d,e\n");
Push(s, 'a');
Push(s, 'b');
Push(s, 'c');
Push(s, 'd');
Push(s, 'e');
printf("(4)栈为%s\n", (StackEmpty(s) ? "空" : "非空"));
printf("(5)栈长度:%d\n", StackLength(s));
printf("(6)从栈顶到栈底元素:");
DispStack(s);
printf("(7)出栈序列:");
while(!StackEmpty(s))
{
Pop(s, e);
printf("%c ", e);
}
printf("\n");
printf("(8)栈为%s\n", (StackEmpty(s) ? "空" : "非空"));
printf("(9)释放栈\n");
return 0;
}
测试结果:
(1)初始化栈s
(2)栈为空
(3)依次进栈元素a,b,c,d,e
(4)栈为非空
(5)栈长度:5
(6)从栈顶到栈底元素:e d c b a
(7)出栈序列:e d c b a
(8)栈为空
(9)释放栈