链表栈 --- C语言(为什么使用栈)

链表栈 --- C语言(为什么使用栈),第1张

链表栈 --- C语言(为什么使用栈)

栈是一种受 *** 作限制(后进先出)的数据结构,链表、数组在功能上可以替代栈,比栈还灵活

为什么要使用栈呢?

首先,特定的数据结构是对特定场景的抽象,而且,数组或链表暴露了太多的 *** 作接口, *** 作上的确灵活自由,但使用时就比较不可控,自然也就更容易出错。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时我们就应该首选“栈”这种数据结构。

比如,浏览器的前进、后退功能,递归

同样可以思考其他数据结构的用途,在那个地方发挥它的作用,为什么被创建


目录

1.头文件

2.结构体

3.创建栈

4.销毁栈

5.入栈

6.出栈

7.输出栈元素

8.主函数

9.判断栈为空


 

1.头文件
#include
#include
#include
2.结构体
typedef struct _linkliststrack {
	int data;
	struct _linkliststrack* next;
}linklist_stack;
3.创建栈
linklist_stack* stack_create() {
	linklist_stack* stack = NULL;
	stack = (linklist_stack*)malloc(sizeof(linklist_stack));
	if (stack == NULL) {
		return NULL;
	}
	stack->next = NULL;
	return stack;
}
4.销毁栈
void stack_destory(linklist_stack* stack) {
	linklist_stack* ptmp = NULL;
	while (stack->next != NULL) {
		ptmp = stack->next;
		stack->next = stack->next->next;
		free(ptmp);
	}
	free(stack);
	return;
}
5.入栈
int stack_push(linklist_stack* stack, int data) {
	linklist_stack* ptmp = NULL;
	ptmp = (linklist_stack*)malloc(sizeof(linklist_stack));
	if (ptmp == NULL) {
		return -1;
	}
	ptmp->data = data;
	ptmp->next = stack->next;
	stack->next = ptmp;
	return 0;
}
6.出栈
int stack_pop(linklist_stack* stack, int* data) {
	linklist_stack* ptmp = NULL;
	if (data == NULL) {
		return -1;
	}
	if (stack->next == NULL) {
		return -1;
	}
	*data = stack->next->data;            
	ptmp = stack->next;
	stack->next = ptmp->next;
	free(ptmp);
	return 0;
}
7.输出栈元素
void stack_dump(linklist_stack* stack) {
	linklist_stack* ptmp = stack->next;
	while (ptmp != NULL) {
		printf("%dn", ptmp->data);
		ptmp = ptmp->next;
	}
	return;
}
8.主函数
int main() {
	linklist_stack* stack = NULL;
	stack = stack_create();
	if (stack == NULL) {
		printf("stack create falied.n");
		return 0;
	}

	printf("请输入插入队列值(100结束插入):n");
	int p = 0;
	while (p != 100) {
		scanf_s("%d", &p);
		stack_push(stack, p);
	}
	stack_dump(stack);
	stack_destory(stack);
	return 0;
}
9.判断栈为空

stack->next == NULL

 

 

这个代码有个不好的地方,在主函数里面,判断插入结束时,使用了100这个数值,使它入队,如果你喜欢好看,可以在while底下做 stack_pop(stack , 100);出队100

我用 while 是因为好看加上 for 有点制约,for 也可以 ,看你喜欢什么

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5115545.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存