#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. 在centos6.7用yum安装redis解决办法

    1. centos默认的安装源在官方centos.org上,而Redis在第三方的yum源里,所以无法安装,非官方的yum推荐用fedora的epel仓库 [root@localhost instal ...

  2. magento模板文件结构详解

    来自: 南国佳木(茶者,南方之嘉木也.) 2015-09-01 23:14:43 模板文件主要分为xml布局文件和html文件 Layout(布局)文件夹存放的是此模板的.xml文件(也就是模版的结构 ...

  3. Linux -- objdump二进制文件比较

    objdump工具用来显示二进制文件的信息,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息. 常用参数说明 -f 显示文件头信息 -D 反汇编所有section (-d反汇编特定se ...

  4. c 头文件<ctype.h>(一)

    头文件<ctype.h>中声明了一些测试字符的函数. 每个函数的参数均为int类型,参数的值必须是EOF或可用unsigned char类型表示的字符,函数返回值为int类型. 如果参数c ...

  5. c++ DLL->DEF->LIB

    一.DLL->DEF https://support.microsoft.com/zh-cn/kb/177429 https://msdn.microsoft.com/zh-cn/library ...

  6. VBA控制outlook自动发送邮件(转)

    使用Excel VBA实现Outlook自动发送邮件 | 在工作上我们都会遇到批量发送邮件的情况,面对重复而规律性的工作,可以使用Excel的VBA实现自动批量化发送邮件.大大减小工作时间,提升工作效 ...

  7. java插入排序

    /** * 插入排序 * @param a * @date 2016-10-8 * @author shaobn */ public static void insertSort(int[] a){ ...

  8. 找出数组中从未出现的最小正整数java实现

    /** * 找出未出现的最小正整数 * @param A * @param n * @date 2016-10-7 * @author shaobn */ public static int find ...

  9. Mysql的基础使用之MariaDB安装

    初学mysql的小白,首次写博客,为了能让自己记得更加深刻,也是以一种小白的角度交代初学者的经历和困难,也算是记录自己成长的步伐吧 我首次用mysql是在ubuntu上 ,现在用的是linux 中的R ...

  10. rc.local 增加自启动

    编辑 /etc/rc.d/rc.local,将要执行的命令放里面. 然后给 rc.local 增加执行权限  chmod +x rc.local . 不过该方法正在被逐步淘汰,提示建议采用自定义服务的 ...