#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MaxSize 10
typedef int ElemType;
//顺序栈的定义
typedef struct
{
ElemType data[MaxSize];//定义一个静态数组存放栈的元素
int top;//栈顶指针
int length;
}SqStack;
SqStack S;
void InitStack(SqStack* s);//栈的初始化
bool PushStack(SqStack* s, ElemType e);//进栈操作
bool PopStack(SqStack* s, ElemType e);//出栈操作
bool GetTopStack(SqStack* s, ElemType* e);//取栈顶元素
bool PrintStack(SqStack* s);//打印栈的元素
void InitStack(SqStack* s)//栈的初始化
{
s->top = -1;//注意:这里的栈顶指针一开始是指向-1的,所以在插入元素之后top指针指向栈顶元素
//若初始化是0,则栈顶指针指向栈顶元素的下一个位置
printf("栈初始化成功\n");
}
bool PushStack(SqStack* s, ElemType e)//进栈操作
{
if (s->top == MaxSize - 1)
printf("该栈已满,无法插入元素\n");
s->data[++s->top] = e;
//s->top=s->top+1;
//s->data[s->top] = e;
printf("进栈成功\n");
s->length++;
}
bool PopStack(SqStack* s, ElemType e)//出栈操作
{
if (s->top == -1)
{
printf("该栈为空,无法完成出栈操作\n");
}
s->data[s->top--];
//e=s->data[s->top];
//s->top=s->top-1;
printf("出栈成功\n");
}
bool GetTopStack(SqStack* s, ElemType* e)//取栈顶元素
{
if (s->top == -1)
{
printf("该栈为空,无法完成出栈操作\n");
}
e = s->data[s->top];
printf("该栈栈顶元素为%d", e);
}
bool PrintStack(SqStack s)
{
for (int i= 0; i< s.length; i++)
{
printf("%d ", s.data[i]);
}
}
栈的特点:
1.只能从一端(栈顶)进行插入和删除元素的线性表(后进先出)
2.注意出栈顺序的考题
3.若初始化指针top指向-1或0时,这会导致在后续的进栈和出栈操作也会有所不同