链表栈的C语言实现
#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语言实现的更多相关文章
- C语言 复杂的栈(链表栈)
//复杂的栈--链表栈 #include<stdio.h> #include<stdlib.h> #define datatype int//定义链表栈数据类型 //定义链表栈 ...
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- 大数据全栈式开发语言 – Python
前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...
- 为什么说Python 是大数据全栈式开发语言
欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...
- 数据结构——栈(C语言实现)
#include <stdio.h> #include <stdlib.h> #include<string.h> #include<malloc.h> ...
- java——链表、链表栈 LinkedListStack、链表队列 LinkedListQueue
LikedList: package Date_pacage; public class LinkedList<E> { public static void main(String[] ...
- 链表栈C语言实现
#ifndef LINKSTACK_H_INCLUDED #define LINKSTACK_H_INCLUDED #include <stdlib.h> #include <std ...
- 栈在go语言中实现,及解决388.文件的最长绝对路径的思路
今天在LeetCode刷每日一题,遇到了388. 文件的最长绝对路径的思路,这道题让我想到了系统的目录是栈结构,果然在题解中找到了栈的解法(暴力半天没出来,跑去看题解了QWQ). 所以我就捎带复习了一 ...
- 链栈的C语言实现
/* 功能:栈的链表实现 Author:lxm Date: 20160511 */ #include <stdio.h> #include <stdlib.h> #define ...
随机推荐
- AFN和ASI区别
AFN和ASI区别 一.AFN和ASI的区别 1.底层实现1> AFN的底层基于OC的NSURLConnection和NSURLSession2> ASI的底层基于纯C语言的CFNetwo ...
- Java学习笔记,前两章总结
第一章 Java平台概论 1.Java不仅仅是个程序语言,代表解决问题的平台,代表了原厂.各个厂商.社群.开发者与用户沟通的成果. 2.Java三大平台,从J2SE.J2EE.J2ME到Java SE ...
- Asp.Net Mvc4 Webapi Request获取参数
最近用mvc4中的WEBAPI,发现接收参数不是很方便,跟传统的request.querystring和request.form有很大区别,在网上搜了一大圈,各种方案都有,但不是太详细,于是跟踪Act ...
- GPS部标平台的架构设计(五)-地图服务算法库
GPS平台,需要和各种地图打交道,需要解决以下的问题: 1.坐标偏移,这个不用多说,需要将原始坐标加偏,然后在百度地图或谷歌上显示出来,需要注意的是百度地图的加偏是偏上再偏,谷歌.高德地图等是火星坐标 ...
- TIJ——Chapter Seven:Reusing Classes
Reusing Classes 有两种常用方式实现类的重用,组件(在新类中创建存在类的对象)和继承. Composition syntax Every non-primitive object has ...
- UVALive 7148 LRIP(树的分治+STL)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- 字符串反转----将this is good 转化为good is this 输出。
思路:现将整个字符串反转,再将每个单词反转: #include "iostream" #include "cstring" using namespace st ...
- 一个.net程序员的安卓之旅-Eclipse设置代码智能提示功能
一个.net程序员的安卓之旅-代码智能提示功能 过完年回来就决心开始学安卓开发,就网上买了个内存条加在笔记本上(因为笔记本原来2G内存太卡了,装了vs2010.SQL Server 2008.orac ...
- (三)SQL入门 数据库规格化简介
什么是数据库的规格化呢,说白了就是为了去除数据库冗余.为了数据库更加容易管理而将大表按照逻辑划分为小表的过程. 什么是数据库的去规格化呢,就是规格化的反面.那么你可能就会问,既然上面说了数据库的规格化 ...
- IISExpress 调试使用学习,使用附加到进程进行快速调试
IIS8.0 Express已经推出了,大家可以通过Microsoft Web Platform Installer 进行安装.(VS2012,VS2013已经内置了,不需安装了) 1.IIS Exp ...