SeqStack.h
#pragma once
#define STACKSIZE 100
typedef char DataType;
typedef struct {
DataType stack[STACKSIZE];
int top;
}SeqStack;
/*stack用于存储栈中的数据元素,top为栈顶指针*/
/*初始化栈*/
void InitStack(SeqStack* S);
/*判断栈是否为空,为空返回1,否则返回0*/
int StackEmpty(SeqStack S);
/*取栈顶元素*/
int GetTop(SeqStack S, DataType* e);
/*将元素e入栈*/
int PushStack(SeqStack* S, DataType e);
/*将栈顶元素出栈*/
int PopStack(SeqStack* S, DataType* e);
/*求栈的长度*/
int StackLength(SeqStack S);
/*清空栈*/
void clearStack(SeqStack* S);
void PrintSeqStack(SeqStack S);
SeqStack.cpp
#include<cstdio>
#include"SeqStack.h"
void InitStack(SeqStack* S)
{
S->top = 0;/*将栈顶指针置为0*/
}
/*判断栈是否为空,为空返回1,否则返回0*/
int StackEmpty(SeqStack S) {
if (S.top == 0)
{
return 1;
}
else {
return 0;
}
}
/*取栈顶元素*/
int GetTop(SeqStack S, DataType* e)
{
if (S.top <= 0) {
printf("栈已经为空!\n");
return 0;
}
else {
*e = S.stack[S.top - 1];
return 1;
}
}
/*将元素e入栈*/
int PushStack(SeqStack* S, DataType e)
{
if (S->top >= STACKSIZE)
{
printf("栈已满,不能将元素进栈\n");
return 0;
}
else {
S->stack[S->top] = e;
S->top++;
return 1;
}
}
/*将栈顶元素出栈*/
int PopStack(SeqStack* S, DataType* e)
{
if (S->top == 0) {
printf("栈中已经没有元素,不能进行出栈操作\n");
return 0;
}
else {
S->top--;
*e = S->stack[S->top];
return 1;
}
}
/*求栈的长度*/
int StackLength(SeqStack S) {
return S.top;
}
/*清空栈*/
void clearStack(SeqStack* S)
{
S->top = 0;/*将栈顶指针置为空*/
}
void PrintSeqStack(SeqStack S)
{
DataType e;
while (S.top > 0) {
PopStack(&S, &e);
printf("%c ", e);
}
printf("\n");
}
测试入栈和出栈
void test_StackPushPoP() {
SeqStack S;
int i;
DataType a[] = { 'A','B','C','D','E' };
InitStack(&S);
for (int i = 0; i < sizeof(a) / sizeof(DataType); i++)
{
PushStack(&S, a[i]);
}
printf("出栈元素\n");
PrintSeqStack(S);
}