#include<stdio.h>
//定义栈最大数
#define Maxsize 20
#define Elemtype char
//定义结构体,这里以顺序栈为例
typedef struct
{
/* data */
Elemtype data[Maxsize];
int top;
}SqStack;
// 链式存储结构体定义
// typedef struct
// {
// /* data */
// Elemtype data;
// struct Link_Node *next;
// }*LiStack;
//栈初始化,这里给出顺序存储,链式存储大同小异
void InitStack(SqStack &s)
{
s.top = -1;
}
//检验是否为空
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)
{
printf("stcak is Null\n");
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;
}
/*打印函数*/
void Print(SqStack s)
{
int i = s.top;
if(i == -1)
{
printf("stack is null.\n");
}else{
printf("from head to least:\n");
while (i>=0)
{
/* code */
printf("%c ",s.data[i]);
i--;
}
}
}
// 测试函数
int main()
{
printf("hello word.");
SqStack s;
printf("initStack\n");
Push(s,'a');
Push(s,'b');
Push(s,'c');
Print(s);
Elemtype t = 'd';
printf("begin t= %c\n",t);
Pop(s,t);
printf("t=%c\n",t);
GetTop(s,t);
printf("head data is %c",t);
return 0;
}