简介:使用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;
}
程序运行结果: