数据结构-C语言顺序栈功能实现

栈:类似于一个容器,如我们生活中的箱子,我们向箱子里放东西,那么最先放的东西是最后才能拿出来的

f5263c03bd894da784275dcba5fd1d67.png

05099d90ef98460d9c2c554b2eb80b4a.png e1a1e4f5356b4bd3a12db495cf6cfb8c.png

代码实现

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

typedef 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;		// 初始化栈的元素个数为0
	return 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;
}

作者水平有限,如有错误请批评指正

上一篇:滚雪球学Redis[4.1讲]:Redis的高可用性与集群架构-3. Redis Cluster


下一篇:RTC定时时钟