今天我们一起来学习最简单的栈--顺序栈的建立。
对于一个顺序栈,我们需要有一个存放数据的数组作为栈,还有一个整数作为栈顶指针。
实现基本思路:创销增删改查(未实现改)
1.初始化(创):
分配一个静态数组data,将top(整形栈顶指针)指向数组-1处,完成初始化
2.入栈(增)
先判满,若未满,则先将栈顶指针top++,然后将当前top位置的data[top]赋值
3.出栈(删)
先判空,若非空,则先将当前值返回,然后将top-1,完成删除操作。该操作实际只实现了逻辑上删除,实际数据还是在数组当中。
4.返回top值(查)
那么我们就先判空,若非空,则return当前位置top值,完成查找。
代码:
#include <stdio.h>
#include <stdbool.h>
#define MaxSize 10
typedef struct
{
int data[MaxSize];//存放栈中元素
int top; //栈顶指针
}SqStack;
bool IniteStack(SqStack stack) //初始化
{
stack.top = -1;
return true;
}
bool push(SqStack *stack,int i) //入栈
{
if (stack->top == MaxSize - 1)
return false; //栈满
stack->top = stack->top + 1;
stack->data[stack->top] = i;
return true;
}
int pop(SqStack *stack)//出栈
{
int temp = 0;
if (stack->top == -1)
return -1; //返回一个不可能在栈中值
temp= stack->data[stack->top];
stack->top=stack->top-1;
return temp;
}
bool IsEmpty(SqStack *stack)//判空
{
if (stack->top == -1)
return true;
else
return false;
}
int StackTop(SqStack *stack) //返回栈顶
{
if (stack->top != -1)
return stack->data[stack->top];
else
return -10000; //返回一个不可能在栈中的值
}
int main()
{
SqStack stack;
stack.top = -1;
for (int i = 0; i < 10; i++)
{
push(&stack, i);
printf("%d ", stack.top);
}
while (!IsEmpty(&stack))
{
int p;
printf(" %d", pop(&stack));
}
return 0;
}