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

该博客介绍了如何使用C语言实现数据结构中顺序栈的基本操作,包括创建、入栈、出栈等,并提供了80行代码实现。实验旨在掌握栈的顺序存储表示和相关算法。在实验中,首先初始化栈,然后依次入栈元素a,b,c,d,e,接着输出出栈序列,最后释放栈。推荐使用C-free或DEV 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++,工具下载链接见我的专栏里面《数据结构与算法》(单链表的基本操作)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思维矩阵K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值