栈的基本操作 C语言 数据结构

大概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++,工具下载链接见我的专栏里面《数据结构与算法》(单链表的基本操作)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章