栈
栈:类似于一个容器,如我们生活中的箱子,我们向箱子里放东西,那么最先放的东西是最后才能拿出来的
代码实现
#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 100typedef struct {int* base; // 栈底指针int* top; // 栈顶指针int size; // 栈元素个数
}stack;// 初始化栈
int initStack(stack* s) {s->top = (int*)malloc(sizeof(int) * MAX_SIZE); // 开辟一块数字栈的内存空间,最大存储100个if (s->top == NULL) { // 当内存空间不足时初始化失败printf("init error");return -1;}s->base = s->top; // 初始化栈的栈顶和栈底是同一位置s->size = 0; // 初始化栈的元素个数为0return 1; // 初始化栈成功
}// 压栈
void push(stack* s, int data) {if (s->size >= MAX_SIZE) { // 如果栈的元素超过最大个数则push失败printf("push error");return;}*(s->top) = data; // 将栈顶当前指向的内存空间赋值s->top++; // 栈顶指针向上移动s->size++; // 栈的元素个数增加
}//出栈
int pop(stack* s) {if (s->top == s->base) { // 如果是空栈则pop失败printf("pop error");return -1;}int* tmp = s->top; // 临时指针指向栈的栈顶int result = *(--tmp); // 将临时指针移动下一个位置并取出值(这个位置才是栈顶的元素所在位置)*(tmp + 1) = NULL; // 栈顶元素置空s->top--; // 栈顶指向下一个位置s->size--; // 栈的元素个数减少return result; // 返回栈顶的值
}// 遍历打印栈
void displayStack(stack* s) {stack* tmp = s;for (int i = 0; i < tmp->size; i++) {printf("%d ",*(tmp->base + i)); // 从栈底向栈顶打印元素}printf("\n");
}int main() {stack* s = (stack*)malloc(sizeof(stack));if (s == NULL) {printf("内存不足无法运行");}else {initStack(s);printf("初始化栈成功\n");printf("进栈:1\n");push(s, 1);printf("当前栈为:\n");displayStack(s);printf("进栈:2\n");push(s, 2);printf("当前栈为:\n");displayStack(s);printf("进栈:3\n");push(s, 3);printf("当前栈为:\n");displayStack(s);printf("出栈:%d\n", pop(s));printf("现在栈为:\n");displayStack(s);}return 0;
}
作者水平有限,如有错误请批评指正