大概80行代码,如下,有需要自取。(数据结构教程 第五版 李春葆)
这次实验是顺序栈的操作,其中取栈顶元素的操作根据自己的情况取舍。
实验四 栈基本操作的实现
【实验目的】
1.掌握栈的顺序存储表示。
2.掌握顺序栈的基本操作,包括创建、入栈、出栈等算法。
【实验内容】
编写程序sqstack.cpp,实现顺序栈的各种基本运算(假设栈中的元素类型为char),并在此基础上设计主程序main.cpp,完成如下功能:
1.初始化栈;
2.判断栈是否为空;
3.依次入栈元素a,b,c,d,e;
4.判断栈是否为空;
5.输出出栈序列;
6.判断栈是否为空;
7.释放栈。
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;
}SeqStack;
void InitStack(SeqStack *&s) //初始化栈
{
s = (SeqStack *)malloc(sizeof(SeqStack));
s->top = -1;
}
void DestroyStack(SeqStack *&s)//释放栈
{
free(s);
}
bool StackEmpty(SeqStack *s)//判断是否为空
{
return (s->top == -1);
}
bool Push(SeqStack *&s, ElemType e)//进栈
{
if(s->top == (MaxSize - 1))
return false;
s->top++;
s->data[s->top] = e;
return true;
}
bool Pop(SeqStack *&s, ElemType &e) //出栈
{
if(s->top == -1)
return false;
e = s->data[s->top];
s->top--;
return true;
}
bool GetTop(SeqStack *s, ElemType &e)//取栈顶元素 ,实验报告里面没有出现,可有可无,后面的主函数没有引用该函数。
{
if(s->top == -1)
return false;
e = s->data[s->top];
return true;
}
int main(int x, char *y[])
{
ElemType e;
SeqStack *s;
printf("栈的基本运算如下:\n");
printf(" 1.初始化栈\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.出栈序列:");
while(!StackEmpty(s))
{
Pop(s, e);
printf("%c ", e);
}
printf("\n");
printf(" 6.栈为%s\n",(StackEmpty(s) ? "空" : "非空"));
printf(" 7.释放栈\n");
DestroyStack(s);
return 0;
}
运行结果:
编译器最好用C-free或者DEV c++,工具下载链接见我的专栏里面《数据结构与算法》(单链表的基本操作)。