#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int SElemType;
typedef struct//顺序栈的存储结构
{
SElemType* base;//栈底指针
SElemType* top;//栈顶指针
SElemType Stacksize;//栈的最大长度
}SqStack;
//栈的初始化,建立一个空栈
void InitStack(SqStack &S)
{
S.base = new SElemType[MAXSIZE];//S.base=(SElemType*)malloc(MAXSIZE*sizeof(ElemType))
if (!S.base)
{
exit;
}
S.top = S.base;//栈底等于栈顶,即建造一个空栈
S.Stacksize = MAXSIZE;
}
//入栈
int Push(SqStack &S, SElemType e)
{
if (S.top - S.base == S.Stacksize)//栈满,不是S.top==S.base
{
return 0;
}
*S.top = e;
S.top++;//先把元素压栈,再移动指针,因为top指向的是最上面元素的上一个位置
return 1;
}
//出栈
int Pop(SqStack& S, SElemType e)
{
if (S.top == S.base)
return 0;//栈空
S.top--;
e = *S.top;//先移动指针,再出栈,因为top指向的是最上面元素的上一个,里面是没有元素的,所以要先向下移动一下
return 1;
}
//取栈顶元素
int GetTop(SqStack S, SElemType& e)
{
if (S.base == S.top) return 0;//栈空
e = *(S.top - 1);//不能写成S.top--,因为取栈顶元素指针不能动
return 1;
}
//栈的显示
void Display(SqStack S)
{
printf("栈底:");
SElemType* p = S.base;//定义一个指针,指向栈中类型的元素,指针类型根据栈中的元素不同而不同
while (p != S.top)//当指针不指向栈顶的时候,一直遍历
{
printf("%d ", *p);
p++;
}
printf("\n");
}
int main()
{
SqStack S;
int e, n;//e为栈中的元素,n为栈的长度
InitStack(S);//先建立一个空栈,之后再入栈
//入栈测试
printf("请输入栈的长度:");
scanf("%d", &n);
printf("请输入入栈的元素:\n");
while (n != 0)
{
scanf("%d", &e);
Push(S, e);//入栈
n--;
}
printf("栈中的元素为:\n");
Display(S);//显示栈中的元素
//出栈测试
Pop(S, e);
printf("出栈后的元素为:\n");
Display(S);
//取栈顶元素测试
GetTop(S, e);
printf("取出的栈顶元素为:%d\n",e);
printf("取出栈顶元素后栈为;\n");
Display(S);
}
运行结果为: