数据结构中栈的相关操作(顺序栈)

功能说明

代码为顺序栈的相关操作,主要操作为初始化栈、判断栈空、入栈、出栈以及获得栈顶元素等功能。代码由头文件(SqStack.h)、接口实现(SqStack.c)和测试文件(main.c)三部分组成。
SqStack.h

#ifndef __SQSTACK__
#define __SQSTACK__
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#pragma warning(disable:4996)
#define MaxSize 50
typedef int Elemtype;
typedef struct SqStack
{
	Elemtype data[MaxSize];
	int top;
}SqStack;
bool StackInit(SqStack *S);
bool StackEmpty(SqStack S);
bool Push(SqStack* S, Elemtype x);
bool Pop(SqStack* S, Elemtype *x);
bool GetTop(SqStack S, Elemtype* x);
#endif

SqStack.c

#include"SqStack.h"
bool StackInit(SqStack *S)
{
	if (S == NULL)
		return false;
	S->top = -1;
	memset(S->data, 0, sizeof(S->data));
	return true;
}
bool StackEmpty(SqStack S)
{
	if (S.top == -1)
		return true;
	else
		return false;
}
bool Push(SqStack* S, Elemtype x)
{
	if (S->top == MaxSize - 1)
		return false;
	S->data[++S->top] = x;
	return true;
}
bool Pop(SqStack* S, Elemtype *x)
{
	if (S->top == -1)
		return false;
	*x = S->data[S->top--];
	return true;
}
bool GetTop(SqStack S, Elemtype* x)
{
	if (S.top == -1)
		return false;
	*x = S.data[S.top];
	return true;
}

main.c

#include "SqStack.h"
int main(int argc, const char* argv[])
{
	SqStack S;
	int x,num,i;
	bool tag = true;
	tag = StackInit(&S);
	if (tag == true)
	{
		printf("栈初始化完成\n");
	}
	tag = StackEmpty(S);
	if (tag == false)
	{
		printf("栈不为空");
	}
	printf("请输入要插入的元素个数: ");
	scanf("%d", &num);
	printf("请输入要插入的元素(用空格分隔): ");
	for (i = 0; i < num; ++i)
	{
		scanf("%d", &x);
		tag = Push(&S, x);
		if (tag == true)
		{
			printf("元素成功入栈!\n");
		}
	}
	tag = Pop(&S, &x);
	if (tag == true)
	{
		printf("元素成功出栈,出栈元素为%d\n", x);
	}
	tag = GetTop(S, &x);
	if (tag == true)
	{
		printf("成功获取栈顶元素,元素为%d\n", x);
	}
	system("pause");
	return 0;
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值