#ifndef _CONST_H_
#define _CONST_H_

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

typedef enum
{
False = 0,
True,
}Bool;

typedef int ElemType;

#define QUEUE_MAX_SIZE 10

#define STACK_INIT_SIZE 10
#define STACK_INCREMENT_SIZE 2

#define Null ((void *)0)

typedef enum
{
NORMAL = 0,
ERROR,
UNDERFLOW,
OVERFLOW,
STATUSCOUNT,
}Status;

#endif

#ifndef _DYNAMIC_STACK_H_
#define _DYNAMIC_STACK_H_

#include "Const.h"

typedef struct stacknode
{
ElemType data;
struct stacknode *pNext;
}StackNode, *pStackNode;

typedef struct dynamicstack
{
pStackNode ptop;
pStackNode pbase;
}DynamicStack, *pDynamicStack;

Status InitDynamicStack(pDynamicStack pDS);

Bool IsDynamicStackEmpty(pDynamicStack pDS);

Bool PushDynamicStack(pDynamicStack pDS, ElemType elem);

Bool PopDynamicStack(pDynamicStack pDS, ElemType *e);

void DestoryDynamicStack(pDynamicStack pDS);

void ClearDynamicStack(pDynamicStack pDS);

Status GetDynamicStackHead(pDynamicStack pDS, ElemType *e);

int GetDynamicStackLength(pDynamicStack pDS);

#endif

#include "DynamicStack.h"
#include "Const.h"

Status InitDynamicStack(pDynamicStack pDS)
{
pStackNode pN = (pStackNode)malloc(sizeof(StackNode));
if (pN == Null)
{
printf("No accessable free memory.\n");
return ERROR;
}
pN->pNext = Null;
pDS->ptop = pN;
pDS->pbase = pN;
return NORMAL;
}

Bool IsDynamicStackEmpty(pDynamicStack pDS)
{
if (pDS->ptop == pDS->pbase)
{
return True;
}
else
{
return False;
}
}

Bool PushDynamicStack(pDynamicStack pDS, ElemType elem)
{
pStackNode pTempStackNode = (pStackNode)malloc(sizeof(StackNode));
if (pTempStackNode == Null)
{
printf("No accessable free memory.\n");
return False;
}

pTempStackNode->data = elem;
pTempStackNode->pNext = pDS->ptop;
pDS->ptop = pTempStackNode;
return True;
}

Bool PopDynamicStack(pDynamicStack pDS, ElemType *e)
{
if (IsDynamicStackEmpty(pDS))
{
printf("The Queue Is Empty.\n");
return False;
}
else
{
*e = pDS->ptop->data;
pStackNode pTempStackNode = pDS->ptop;
pDS->ptop = pDS->ptop->pNext;
free(pTempStackNode);
return True;
}
}

void DestoryDynamicStack(pDynamicStack pDS)
{
pStackNode p = pDS->ptop;
pStackNode q = Null;
while(p != Null)
{
q = p;
p = p->pNext;
free(q);
}
pDS->ptop = Null;
pDS->pbase = Null;
}

void ClearDynamicStack(pDynamicStack pDS)
{
pStackNode p = pDS->ptop;
pStackNode q = Null;
while(p != pDS->pbase)
{
q = p;
p = p->pNext;
free(q);
}
pDS->pbase->pNext = Null;
pDS->ptop = pDS->pbase;
}

Status GetDynamicStackHead(pDynamicStack pDS, ElemType *e)
{
if (IsDynamicStackEmpty(pDS))
{
printf("The linked queue is empty.\n");
return ERROR;
}
*e = pDS->ptop->data;
return NORMAL;
}

int GetDynamicStackLength(pDynamicStack pDS)
{
if (IsDynamicStackEmpty(pDS))
{
return 0;
}
int Count = 0;
pStackNode pTemp = pDS->ptop;

while(pTemp->pNext != Null)
{
Count++;
pTemp = pTemp->pNext;
}
return Count;
}

链表栈的C语言实现的更多相关文章

  1. C语言 复杂的栈(链表栈)

    //复杂的栈--链表栈 #include<stdio.h> #include<stdlib.h> #define datatype int//定义链表栈数据类型 //定义链表栈 ...

  2. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  3. 大数据全栈式开发语言 – Python

    前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...

  4. 为什么说Python 是大数据全栈式开发语言

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...

  5. 数据结构——栈(C语言实现)

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

  6. java——链表、链表栈 LinkedListStack、链表队列 LinkedListQueue

    LikedList: package Date_pacage; public class LinkedList<E> { public static void main(String[] ...

  7. 链表栈C语言实现

    #ifndef LINKSTACK_H_INCLUDED #define LINKSTACK_H_INCLUDED #include <stdlib.h> #include <std ...

  8. 栈在go语言中实现,及解决388.文件的最长绝对路径的思路

    今天在LeetCode刷每日一题,遇到了388. 文件的最长绝对路径的思路,这道题让我想到了系统的目录是栈结构,果然在题解中找到了栈的解法(暴力半天没出来,跑去看题解了QWQ). 所以我就捎带复习了一 ...

  9. 链栈的C语言实现

    /* 功能:栈的链表实现 Author:lxm Date: 20160511 */ #include <stdio.h> #include <stdlib.h> #define ...

随机推荐

  1. Android应用层View绘制流程与源码分析

    1  背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原 ...

  2. Redis: OOM command not allowed when used memory > ‘maxmemory’

    现象 日志里出现异常: OOM command not allowed when used memory > 'maxmemory' 原因 内存已满,不允许再存数据了,可以通过redis-cli ...

  3. python web框架之django环境搭建

    一.django环境搭建 https://www.djangoproject.com/download/ 下载适合自己的版本,在右边有压缩包版本的,也可以到git上去拽.我用的python27,下载的 ...

  4. SQLite如何测试

    原文 http://www.sqlite.org/testing.html 目录 1. 介绍 1.1. 执行总结 2. 测试套件 3.异常测试 3.1 内存溢出测试 3.2 I/O错误测试 3.3 c ...

  5. Node.js的特点

    作为后端JavaScript的运行平台,Node保留了前端JavaScript中些熟悉的接口,没有改写语言本身的任何特性,依旧基于作用域和原型链,区别在于它将前端中广泛应用的思想作用到了服务器端.下面 ...

  6. winserver2008 management note

    1,磁盘online及介质保护 Windows server 2008 增加的磁盘无法初始化-提示:介质受写入保护.插了下相关说明,在VMware的帖子找到了解决办法: 开始-运行,cmd.打开命令提 ...

  7. (转)SVN服务器搭建和使用(一)

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...

  8. Node.js 安装与配置

    引言: JavaScript是一种运行在浏览器的脚本,它简单,轻巧,易于编辑,这种脚本通常用于浏览器的前端编程,但是一位开发者Ryan有一天发现这种前端式的脚本语言可以运行在服务器上的时候,一场席卷全 ...

  9. Linux selinux iptables

    关闭SELINUX – 使用getenforce命令检查SELINUX状态,若结果不是”Disabled”,可使用setenforce 0命令临时关闭SELINUX.要永久关闭SELINUX,需修改/ ...

  10. chattr的常用参数详解

    chattr的常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际生产环境中,有的运维工程师不得不和开发和测试打交道,在我们公司最常见的就是部署接口.每天每个人部署的 ...