算法与数据结构之栈的顺序存储

简介:
#include<stdio.h>
#include<windows.h>
#include<malloc.h>
#define maxsize 50
typedef int elemtype;
typedef struct //定义
{
elemtype data[maxsize];
int top;

}sqstack;


void initstack(sqstack *&s) //初始化
{
s=(sqstack *)malloc(sizeof(sqstack));
s->top=-1;

}


void push(sqstack *&s) //进栈
{
char e;
getchar();
printf("请输入需进栈的元素:");
scanf("%c",&e);
if(s->top>maxsize-1)
printf("栈满,错误!\n");
else
{
s->top++;
s->data[s->top]=e;
printf("进栈成功\n");
}

}


void gettop(sqstack *s) //取栈顶元素
{
char t;
if(s->top==-1)
printf("栈空,取值失败!\n");
else
{
t=s->data[s->top];
printf("取值成功,栈顶元素为:%c\n",t);
}

}


void stackempty(sqstack *s) //判断栈是否为空
{
if(s->top==-1)
printf("栈为空\n");
else
printf("栈不为空\n");

}


void pop(sqstack *&s) //出栈
{
char e;
if(s->top==-1)
printf("栈为空,出栈失败\n");
else
{
e=s->data[s->top];
s->top--;
printf("出栈成功,出栈元素为:%c\n",e);
}

}


int length(sqstack *s) //求栈长
{
if(s->top==-1)
return(-1);
else
return(s->top+1);

}


void destroy(sqstack *&s) //销毁栈
{
char t;
getchar();
printf("确定要销毁栈请输入y 否则不销毁:");
scanf("%c",&t);
if(t=='y')
{
free(s);
printf("销毁成功\n");
exit(0);
}
else
printf("栈未销毁\n");

}


void output(sqstack *s)
{
int m,n=s->top;
m=length(s)+1;
if(s->top==-1)
printf("栈为空\n");
else
{
printf("出栈序列为:");
for(;m>0;m--)
{
printf(" %c",s->data[s->top]);
s->top--;
}
printf("\n");
s->top=n;
}

}


void main()
{
sqstack *s;

int m;
initstack(s);
while(1)
{
printf("请选择:");
printf(" 1 进栈\n");
printf(" 2 判断栈是否为空\n");
printf(" 3 取栈顶元素\n");
printf(" 4 出栈\n");
printf(" 5 销毁栈\n");
printf(" 6 求栈的长度\n");
printf(" 7 输出出栈序列\n");
printf(" 8 退出\n");
scanf("%d",&m);
switch(m)
{
case 1:push(s);break;
case 2:stackempty(s);break;
case 3:gettop(s);break;
case 4:pop(s);break;
case 5:destroy(s);break;
case 6:printf("栈的长度为%d\n",length(s));break;
case 7:output(s);break;
case 8:exit(0);
default:printf("输入错误,请重新输入\n");
}
}
}
目录
相关文章
|
8天前
|
存储 JavaScript 前端开发
什么是堆?什么是栈?他们之间从区别和联系
什么是堆?什么是栈?他们之间从区别和联系
24 0
|
4天前
|
存储
栈与队列练习题
栈与队列练习题
|
4天前
|
存储 索引
操作数栈的字节码指令执行分析
操作数栈的字节码指令执行分析
|
4天前
|
算法 C++
D1. Range Sorting (Easy Version)(单调栈+思维)
D1. Range Sorting (Easy Version)(单调栈+思维)
|
4天前
|
人工智能
线段树最大连续子段板子😂单调栈
线段树最大连续子段板子😂单调栈
|
4天前
数据结构第四课 -----线性表之栈
数据结构第四课 -----线性表之栈
|
5天前
|
存储
栈数据结构详解
栈(stack)是一种线性数据结构,栈中的元素只能先入后出(First In Last Out,简称FILO)。最早进入的元素存放的位置叫作栈底(bottom),最后进入的元素存放的位置叫作栈顶 (top)。本文是对堆结构的通透介绍
|
5天前
|
存储 Java
数据结构奇妙旅程之栈和队列
数据结构奇妙旅程之栈和队列
|
5天前
|
存储 机器学习/深度学习 算法
|
6天前
|
算法
栈刷题记(二-用栈操作构建数组)
栈刷题记(二-用栈操作构建数组)