链式栈的实现(头文件及源程序)

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;
}

链式栈的实现(头文件及源程序)相关推荐

  1. 链式队列的实现(头文件及源程序)

    链式队列的实现(头文件及源程序) Linkedqueue.h #ifndef __LINKEDQUEUE_H__ #define __LINKEDQUEUE_H__//元素类型定义 typedef i ...

  2. 【Keil】Keil5添加源程序和头文件

    xxx.c就是源程序 xxx.h就是头文件 [源程序添加方法] 双击文件夹,例如图片上的Source,跳出弹窗,选择需要添加的源程序即可 [添加头文件的方法] 1.首先点击图片红框处,或是在文件夹te ...

  3. c语言cythe头文件,第5章 C语言序的基本结构.doc

    第5章 C语言序的基本结构 第5章 C语言程序的基本结构 C语言程序是由若干个函数单元组成的,每个函数都是完成某个特殊任务的子程序段.组成一个程序的若干个函数可以保存在一个源程序文件中,也可以保存在几 ...

  4. ifndef/define/endif——主要目的是防止头文件的重复包含和编译

    原文:http://www.jb51.net/article/100939.htm 原文:https://blog.csdn.net/abc5382334/article/details/180527 ...

  5. gsoap 学习 1-自己定义接口生成头文件

    接口头文件的格式在向导中没有看到明确的说明性的内容,但通过看开发包中示例程序中头文件定义和通过wsdl生成的头文件的内容,可以发现,头文件中都会出现以下几行信息  //gsoap ns service ...

  6. #ifndef 在头文件中的作用

    在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时 ,就会出现大量"重定义"的错误.在头文件中实用#ifndef #define #e ...

  7. C/C++ 头文件作用

    最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题. 学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是 ...

  8. Linux下gcc编译中关于头文件与库文件搜索路径相关问题

    如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:) 原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631 ========== ...

  9. c++ max 的头文件_学用C/C++编写小游戏程序(2.2 打字练习游戏)

    2.2 打字练习游戏(随机数与特殊输入) 有了上面的绘制简单动画的技术,现在来看一下简易的打字练习游戏. [程序2-2]编写一个简易的打字训练游戏:计算机每次随机生成一个小写英文字符,从屏幕一行的左侧 ...

最新文章

  1. Mysql定时执行任务实现方法
  2. S3C2440扩展SDRAM
  3. Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析
  4. C#:winform开发的System.AccessViolationException错误,已解决
  5. Maven右边栏红色,omitted for duplicate 而且Failed to execute goal on project xxx-service: Could not resolve
  6. java onkeydown_java笔记 js onkeypress与onkeydown 事件区别详细说明
  7. 【导入篇】Robotics:Perception课程_导入篇、四周课程内容、week 1st Perspective Projection
  8. GIT 密钥生成工具puttygen使用技巧
  9. html点击某部分后弹出展开,点击按钮弹出框并显示内容
  10. 或且非 java_Java的运算符号(逻辑与、或、非、移位运算)
  11. 电子设计(8)NPN和PNP三极管驱动LED电路
  12. 实现ftpserver
  13. 选购云服务器时云盘该如何选择?(高性能/SSD/增强型/急速型)
  14. 自建ipa下载服务器的方法(最简单,使用在线工具)
  15. python列表用来有序存放一组_python 列表 元组(自兴人工智能)
  16. Pr 复古胶片老电影回忆效果
  17. 3D结构光摄像头深度算法 转载
  18. 3GPP TS 29244-g30 中英文对照 | 5.4.14 Deferred PDR activation and deactivation
  19. Windows10系统重装
  20. 解决nrm ls命令没有*(星号)的问题

热门文章

  1. DOM-8 【兼容】冒泡捕获流、事件与事件源对象、事件委托
  2. HTTP协议(3)浏览器的使用之查看源码
  3. centos7装完chrome无法使用yum问题解决
  4. js备忘录模式——实现分页点击已经请求过上一页的数据(读js设计模式)
  5. abstract class 和 interface 区别
  6. WordPress博客系统的安全
  7. 原创:MD5 32位加密软件
  8. exchange命令整理
  9. Halcon: 畸变矫正与标定(1)
  10. BundleFusion那些事儿