功能说明
代码为顺序栈的相关操作,主要操作为初始化栈、判断栈空、入栈、出栈以及获得栈顶元素等功能。代码由头文件(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;
}