【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--;
	}
}

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

原创文章 16 获赞 21 访问量 1545

猜你喜欢

转载自blog.csdn.net/The_Handsome_Sir/article/details/105521552