【02】顺序栈的初始化、入栈、出栈等操作

	大体框架来自数据结构课本,本人稍做修改。废话不多说上代码。
#include<stdio.h>
#include<windows.h>
#define MAXSIZE 100
typedef int ElemType;

typedef struct Stack
{
	ElemType data[MAXSIZE];  //栈空间
	int top;				//栈顶指示
}SeqStack;
void Init_SeqStack(SeqStack* s);  //初始化顺序栈
int Empty_SeqStack(SeqStack* s);  //判断顺序栈是否为空
int Push_SeqStack(SeqStack *s,ElemType x); //顺序栈入栈
void PrintStack(SeqStack *s);     //输出顺序栈操作
int Pop_SeqStack(SeqStack* s,ElemType* x);    //顺序栈出栈操作

int main()
{
	ElemType x;
	SeqStack s;
	Init_SeqStack(&s);
	Push_SeqStack(&s,1);
	Push_SeqStack(&s,2);
	Push_SeqStack(&s,3);
	printf("\n入栈后的顺序栈为:\n");
	PrintStack(&s); 
	printf("\n");
	Pop_SeqStack(&s,&x);
	Pop_SeqStack(&s,&x);
	Pop_SeqStack(&s,&x);
	printf("\n出栈后的顺序栈为:\n");
	PrintStack(&s); 
}


/*======================
函数功能:顺序栈空栈
函数输入:顺序栈地址
函数输出:无
=======================*/
void Init_SeqStack(SeqStack* s)
{
	s->top=-1;
}
/*======================
函数功能:判断顺序栈是否为空
函数输入:顺序栈地址
函数输出:1——栈空;2——栈非空
=======================*/
int Empty_SeqStack(SeqStack* s)
{
	if(s->top==-1)
		return 1;
	else
		return 0;
}
/*=======================
函数功能:顺序进栈操作
函数输入:数学栈地址,进栈元素值
函数输出:0——栈上溢,操作失败;1——操作正常
========================*/
int Push_SeqStack(SeqStack *s,ElemType x)
{
	if(s->top==MAXSIZE-1)	return 0;//栈满
	else
	{
		s->top++;
		s->data[s->top]=x;
		printf("%4d入栈",s->data[s->top]);
	}
	return 1;
}
/*=======================
函数功能:顺序栈输出
函数输入:顺序栈地址
函数输出:无
========================*/
void PrintStack(SeqStack *s)
{
	int i;
	if(Empty_SeqStack(s)==1)    //栈空不能输出
	{
		printf("顺序栈为空\n");
		exit(1);
	}
	else
	{
		for(i=s->top;i>=0;i--)
			printf("%4d",s->data[i]);
	}
}
/*=======================
函数功能:顺序出栈操作
函数输入:顺序栈地址,出栈元素地址
函数输出:0——栈下溢,操作失败;1——操作正常
========================*/
int Pop_SeqStack(SeqStack*s,ElemType* x)
{
	if(Empty_SeqStack(s)==1)return 0;
	else
	{
		printf("%4d出栈",s->data[s->top]);
		*x=s->data[s->top];
		s->top--;
	}
}

运行结果
在这里插入图片描述
第一次写博客,有诸多不完善之处,若有误,斧正。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值