栈的基本操作
栈是限定仅在表尾进行删除或者插入操作的线性表。遵循$last$ $in$ $first$ $out$即:后进先出
具体实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 20
typedef struct stack {
int *stack;
int top;
}STACK;
typedef STACK* stackPtr;
void initStack(stackPtr s) {
// 初始化stack
s -> stack = (int *)malloc(sizeof(int) * MAXSIZE);
s -> top = -1;
}
//是否为空
bool isStackEmpty(stackPtr s) {
if (s -> top == -1) {
return true;
}
return false;
}
//入栈
void pushStack(stackPtr s, int data) {
if (s -> top == MAXSIZE - 1) {
printf("栈满");
return;
}
s -> top ++;
s -> stack[s -> top] = data;
}
//出栈
void popStack(stackPtr s) {
if (isStackEmpty(s)) {
printf("栈为空,无法出栈");
return;
}
s -> stack[s -> top--];
}
int getTop(stackPtr s) {
if (isStackEmpty(s)) {
return -1;
}
return s -> stack[s -> top];
}
int main(int argc, const char * argv[]) {
stackPtr s = (stackPtr)malloc(sizeof(STACK));
initStack(s);
for (int i = 0; i < 10; i++) {
pushStack(s, i);
}
while (!isStackEmpty(s)) {
printf("%d\n",getTop(s));
popStack(s);
}
return 0;
}