栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链表栈 --- 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 也可以 ,看你喜欢什么

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433466.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号