链式栈的实现(头文件及源程序)
2021/7/22 14:09:35
本文主要是介绍链式栈的实现(头文件及源程序),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
链式栈的实现(头文件及源程序)
Linkedstack.h
#ifndef __LINKEDSTACK_H__ #define __LINKEDSTACK_H__ //元素类型定义 typedef int ElemType_stack; //结点结构体类型定义 typedef struct Node_stack { ElemType_stack data; struct Node_stack *next; struct Node_stack *front; }Node_stack; //栈类型定义 typedef struct Linkedstack { int num; Node_stack *top; //栈顶指针 Node_stack *bottom; //栈底指针 }Linkedstack; //创建一个空栈 Linkedstack *Init_stack(); //创建一个新结点 Node_stack *Create_New_Node_stack(ElemType_stack value); //入栈 void push_stack(Linkedstack *linkedstack, ElemType_stack value); //出栈 void pop_stack(Linkedstack *linkedstack); //销毁一个栈 void destroy_stack(Linkedstack *linkedstack); //读取栈顶元素 ElemType_stack get_stack_top(Linkedstack *linkedstack); //判断栈空 int empty_stack(Linkedstack *linkedstack); //获取栈的元素个数 int length_stack(Linkedstack *linkedstack); #endif
Linkedstack.c
#include <stdio.h> #include <stdlib.h> #include "linkedstack.h" //栈初始化 Linkedstack *Init_stack( ) { Linkedstack *linkedstack = malloc(sizeof(Linkedstack)); linkedstack->num = 0; linkedstack->top = NULL; linkedstack->bottom = NULL; return linkedstack; } //创建一个新结点 Node_stack *Create_New_Node_stack(ElemType_stack value) { Node_stack *new_node = malloc(sizeof(Node_stack)); new_node->data = value; new_node->next = NULL; new_node->front = NULL; return new_node; } //入栈 void push_stack(Linkedstack *linkedstack, ElemType_stack value) { if (linkedstack == NULL) { printf("栈不存在!\n"); return; } Node_stack *new_node = Create_New_Node_stack(value); if (linkedstack->num == 0) { linkedstack->top = new_node; linkedstack->bottom = new_node; new_node->front = linkedstack->top; } else { linkedstack->top->next = new_node; new_node->front = linkedstack->top; linkedstack->top = new_node; } linkedstack->num++; } //出栈 void pop_stack(Linkedstack *linkedstack) { if (linkedstack == NULL) { printf("栈不存在!\n"); return; } if (linkedstack->num == 1) { linkedstack->top->front = NULL; free(linkedstack->top); linkedstack->top = NULL; linkedstack->bottom = NULL; } else { linkedstack->top = linkedstack->top->front; free(linkedstack->top->next); linkedstack->top->next = NULL; } linkedstack->num--; } //销毁一个栈 void destroy_stack(Linkedstack *linkedstack) { if (linkedstack == NULL) { printf("栈不存在!\n"); return; } else { while (linkedstack->num != 0) { pop_stack(linkedstack); } //free(linkedstack); linkedstack = NULL; } } //读取栈顶元素 ElemType_stack get_stack_top(Linkedstack *linkedstack) { if (linkedstack == NULL) { printf("栈不存在!\n"); return 0; } if (linkedstack->num == 0) { printf("栈已空,获取栈顶元素失败!"); return 000; } else { return linkedstack->top->data; } } //判断栈空 int empty_stack(Linkedstack *linkedstack) { if (linkedstack == NULL) { printf("栈不存在!\n"); return -1; } if (linkedstack->num == 0) { return 1; //栈空 } else { return 0; //栈非空 } } //获取栈的元素个数 int length_stack(Linkedstack *linkedstack) { if (linkedstack == NULL) { printf("链表不存在!\n"); return 0; } return linkedstack->num; }
这篇关于链式栈的实现(头文件及源程序)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?