数据结构:顺序栈的基本操作

简介:使用C语言实现顺序栈的基本操作,包括初始化、空判断、进栈、出栈等操作。并且,在主函数中测试了程序的正确性。

头文件SqStack.h:数据类型定义,函数声明

#ifndef SQSTACK_H
#define SQSTACK_H

#include "stdio.h"

#define MAXSIZE 10

typedef int ElemType;

typedef enum{
	FALSE,
	TRUE
}BOOL;

typedef struct{
	ElemType data[MAXSIZE];
	int top;
}SqStack;

void InitStack(SqStack *S);
BOOL StackEmpty(SqStack S);
BOOL Push(SqStack *S, ElemType e);
BOOL Pop(SqStack *S, ElemType *e);

#endif

源文件SqStack.c:基本操作的实现

#include "SqStack.h"

/********************************************************************************
 @brief  初始化栈
 @param  S:顺序栈 
 @retval void
 @note   void
*********************************************************************************/
void InitStack(SqStack *S)
{
	S->top = -1; //初始化栈顶指针
}

/********************************************************************************
 @brief  判断栈空
 @param  S:顺序栈 
 @retval void
 @note   void
*********************************************************************************/
BOOL StackEmpty(SqStack S)
{
	return (BOOL)(S.top == -1);
}

/********************************************************************************
 @brief  在栈顶插入新元素
 @param  S:顺序栈 
         e:插入元素数值
 @retval TRUE :操作成功
         FALSE:操作失败
 @note   void
*********************************************************************************/
BOOL Push(SqStack *S, ElemType e)
{
	if (S->top == MAXSIZE -1){ //栈满,报错
		return FALSE;
	}

	S->top++; //指针先加1

	S->data[S->top] = e; //新元素入栈

	return TRUE;
}

/********************************************************************************
 @brief  删除栈顶元素
 @param  S:顺序栈 
         e:删除栈顶元素的数值
 @retval TRUE :操作成功
         FALSE:操作失败
 @note   void
*********************************************************************************/
BOOL Pop(SqStack *S, ElemType *e)
{
	if (S->top == -1){ //栈空,报错
		return FALSE;
	}

	*e = S->data[S->top]; //栈顶元素先出栈

	S->top--; //栈顶指针再减1

	return TRUE; 
}

主函数main.c:测试程序的正确性

/***************************************头文件***********************************/
#include "stdio.h"
#include "stdlib.h"
#include "SqStack.h"
/**********************************宏定义及类型定义******************************/

/************************************定义全局变量********************************/

/********************************************************************************
 @brief  打印栈中所有元素
 @param  S:顺序栈 
 @retval TRUE :操作成功
         FALSE:操作失败
 @note   void
*********************************************************************************/
BOOL PrintStackAllElem(SqStack S)
{
	int i;

	if (S.top == -1){ //表空,报错
		return FALSE;
	}

	for (i = 0; i < MAXSIZE; i++)
	{
		printf("第%d元素的数值为%d\n", i+1, S.data[i]);
	}

	return TRUE;
}

/*************************************函数声明***********************************/

void TestSqList(void)
{
	int i;
	SqStack S;
	ElemType e;

	printf("初始哈顺序栈...\n");

	InitStack(&S);

	printf("\n栈空判断...\n");

	if (StackEmpty(S)){
		printf("判断结果:栈空\n");
	}
	else{
		printf("判断结果:栈非空\n");
	}

	printf("\n压栈操作...\n");

	for (i = 0; i < MAXSIZE; i++)
	{
		if (Push(&S, i+1)){
			printf("压栈成功\n");
		}
		else{
			printf("压栈失败\n");
		}

		printf("打印栈中所有元素...\n");

		PrintStackAllElem(S);

		printf("\n");
	}

	printf("\n出栈操作...\n");

	for (i = 0; i < MAXSIZE; i++)
	{
		if (Pop(&S, &e)){
			printf("出栈成功,出栈元素数值为%d\n", e);
		}
		else{
			printf("出栈失败\n");
		}
	}
}
/********************************************************************************
 @brief  主函数
 @param  void 
 @retval void
 @note   void
*********************************************************************************/
int main(void)
{
	TestSqList();

	system("pause");

	return 0;
}

程序运行结果:
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值