栈ADT的链表实现
/* 栈ADT链表实现的类型声明 */
struct Node;
typedef struct Ndoe *PtrToNode;
typedef PtrToNode Stack; struct Node{
ElementType Element;
Stack Next;
}; /* 测试是否为空栈 */
int
IsEmpty( Stack S )
{
return S->Next == NULL;
}
/* 创建空栈 */
Stack
CreateStack(void)
{
Stack S; S = malloc(sizeof(struct Node));
if(S == NULL)
FatalError("no space");
S->Next = NULL;
return S;
}
/* 清空栈 */
/* 直接删除链表与无数次Pop异曲同工 */
void
MakeEmpty( Stack S)
{
Stack p,TmpCell;
p = S->Next;
S->Next = NULL;
while(p != NULL )
{
TmpCell = p->Next;
free(p);
p = TmpCell;
}
}
/* 书上的实现方法 */
void
MakeEmpty( Stack S )
{
if(S == NULL)
Error("Must create a stack");
else
{
while(!IsEmpty(S))
Pop(S);
}
}
/* Pop 例程 */
void
Pop( Stack S )
{
PtrToNode FirstCell;
FirstCelll = S->Next;
S->Next = FirstCell->Next;
free(FirstCell);
}
/* Push 进栈操作 */
void
Push( Stack S, ElementType X )
{
PtrToNode TmpCell;
TmpCell = malloc( sizeof( struct Node ) );
if( TmpCell == NULL )
FatalError("out of space");
else
{
TmpCell->Element = X;
TmpCell->Next = S->Next;
S->Next = TmpCell;
}
}
/* 返回栈顶元素 */
ElementType
Top( Stack S )
{
if( IsEmpty( S ) )
Fata
}
栈ADT的链表实现的更多相关文章
- LIFO栈 ADT接口 链表实现
LIFO 链栈结构 typedef int ElemType; struct node{ ElemType data; struct node* next; }; typedef struct nod ...
- 《数据结构与算法分析》学习笔记(四)——栈ADT
一.栈ADT是what? 1.定义 栈,是限制插入和删除都只能在一个位置上进行的表. 2.图示 3.栈的基本功能 (1)是否为空 (2)进栈 (3)出栈 (4)清空 (5)取栈顶 二.栈的链表实现 # ...
- 3.6 栈 ADT - 3.7 队列 ADT
3.6 栈 ADT 栈是限制插入和删除只能在一个位置上进行的表,叫做栈的顶部.对栈的基本操作有进栈和出栈,进栈在顶部插入元素,出栈删除最后插入的元素. 栈是一个表,因此任何实现表的方法都能实现栈.显然 ...
- ②泡茶看<数据结构>,喜欢看源码-栈ADT
前言 听着天籁,我是个音乐迷.时间充实着,会过得很快.我马上也可以到傍晚的时候去乐室吹我心爱的萨克斯. 嘟嘟嘟... 我会吹一首简单的歌咯,哈哈我想到了一个神奇的比喻,待会说. 栈ADT模型(又称LI ...
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- 栈ADT
栈 栈是限制插入和删除只能在同一位置的表,这一位置称为栈顶(top),也可能称为LIFO表 对于空栈的pop(弹栈)操作是一个ADT错误,但是若是push(压栈)时空间超限并不是ADT错误 实现:基于 ...
- 【ADT】链表的基本C语言实现
什么是抽象数据类型?首先,这一概念是软件开发人员在力求编写的代码健壮.易维护且可以复用的过程中产生的.英文是AbstractData Type.有人将其比作"抽象"的墙壁,&quo ...
- 栈(存储结构链表)--Java实现
/*用链表实现栈--链栈 * */ public class MyLinkedStack { public MyLinkedList linklist; int items; public MyLin ...
- python中栈的单链表实现
参考博客:https://www.cnblogs.com/stacklike/p/8284550.html 基于列表的简单实现 # 先进后出 # 以列表实现的简单栈 class SimpleStack ...
随机推荐
- BufferedStream类 - 缓冲流
BufferedStream常用于对其他流的一个封装,它必须和其他流结合一起使用.MemoryStream将所有的内容都放入内存中,而BufferedStream不是.BufferedStream在基 ...
- 转:LINQ查询返回DataTable类型
动态绑定ReportViewer虽然之前实现过,但现在弄起来还是有点晕,主要是过去没有使用Linq,数据的操作经常用到DataTable,可以直接拿来使用,现在用Linq更方便,也懒得再用之前的数据库 ...
- UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>
C - 秋实大哥与时空漫游 Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
- Windows多线程同步系列之一-----互斥对象
多线程同步之互斥对象 作者:vpoet mail:vpoet_sir@163.com 对卖票问题进行线程间同步,本文将在上文的基础上,使用互斥对象对线程进行同步. 首先看看windows API ...
- jsp定时方法
jsp定时方法 $(function(){ totaladd(); //定时时触发的函数 setInterval(totaladd,);//设置定时1000=1秒 }); function total ...
- 在Linux下如何创建LVM及LVM创建过程
Linux LVM创建过程:(我用的是Centos6.8) 一.准备工作: LVM可以的创建可以在系统安装的过程中创建,也可以在安装完系统之后再创建建,都是可以的,我的是在系统安装完之后创建的,具体的 ...
- ChromiumFX中js调用C#方法
server端代码: ChromiumWebBrowser wb; wb.AddGlobalJSFunction("CfxHelloWorld").Execute += CfxHe ...
- android:强大的图片下载和缓存库Picasso
1.Picasso简单介绍 Picasso是Square公司出品的一个强大的图片下载和缓存图片库.官方网址是:http://square.github.io/picasso/ 仅仅须要一句代码就能够将 ...
- Sybase配置中文语言支持及字符集
在windows平台上,Sybase ASE15.0.7安装完成后默认语言是:英语(us_english),默认字符集为:cp850.cp850是一个西欧字符集,虽然也能使用cp850字符集保存汉字, ...
- web.xml中的主要元素说明(listener, filter, servlet)
web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...