/* stack.h */

#ifndef _stack_h
#define _stack_h struct stack_record;
typedef struct stack_record *stack;
typedef int element_type; int is_empty( stack s );
int is_full( stack s );
stack create_stack( int max_elements );
void dispose_stack( stack s );
void make_empty( stack s );
void push( element_type x, stack s );
element_type top( stack s );
void pop( stack s );
element_type top_and_pop( stack s ); #endif
/* stack.c */

#include "stack.h"
#include <stdio.h>
#include <stdlib.h> #define MIN_STACK_SIZE 5 struct stack_record
{
int capacity;
int top_of_stack;
element_type *array;
}; stack
create_stack( int max_elements )
{
stack s; if( max_elements < MIN_STACK_SIZE )
{
printf( "Stack size is too small\n" );
exit(0);
} s = malloc( sizeof( struct stack_record ));
if( s == NULL )
{
printf( "Out of sapce\n" );
exit(1);
} s->array = malloc( sizeof( element_type ) * max_elements );
if( s->array == NULL )
{
printf( "Out of space\n" );
exit(1);
} s->capacity = max_elements;
make_empty( s ); return s;
} void
dispose_stack( stack s )
{
if( s != NULL )
{
free( s->array );
free( s );
}
} int
is_empty( stack s )
{
return s->top_of_stack == -1;
} int
is_full( stack s )
{
return s->capacity == s->top_of_stack + 1;
} void
make_empty( stack s )
{
s->top_of_stack = -1;
} void
push( element_type x, stack s )
{
if( is_full( s ) )
{
printf( "Full stack!\n" );
exit(0);
}
else
s->array[++s->top_of_stack] = x;
} element_type
top( stack s )
{
if( !is_empty( s ) )
return s->array[s->top_of_stack];
else
{
printf( "Empty stack\n" );
exit(0);
} return 0;
} void
pop( stack s )
{
if( is_empty( s ) )
{
printf ("Empty stack\n");
exit(0);
}
else
s->top_of_stack--;
} element_type
top_and_pop( stack s )
{
if( !is_empty( s ) )
return s->array[s->top_of_stack--];
else
{
printf( "Empty stack\n" );
exit(0);
} return 0;
}
/* stack_test.c */

#include "stack.h"
#include <stdio.h> int
main(void)
{
stack s;
int x;
int y;
int z; s = create_stack(10); push( 1, s );
push( 2, s );
push( 3, s ); x = top_and_pop( s );
y = top_and_pop( s );
z = top_and_pop( s );
printf("%d\n%d\n%d\n", x, y, z); dispose_stack( s );
return 0;
}

 

测试结果:

栈的实现实例(C语言)的更多相关文章

  1. Redis:安装、配置、操作和简单代码实例(C语言Client端)

    Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...

  2. 实例15_C语言绘制万年历

    实例说明:

  3. 数栈运维实例:Oracle数据库运维场景下,智能运维如何落地生根?

    从马车到汽车是为了提升运输效率,而随着时代的发展,如今我们又希望用自动驾驶把驾驶员从开车这项体力劳动中解放出来,增加运行效率,同时也可减少交通事故发生率,这也是企业对于智能运维的诉求. 从人工运维到自 ...

  4. JavaScript中的栈及通过栈操作的实例

    <script> /*栈操作*/ function Stack() { this.dataStore = []; this.top = 0; this.push = push; this. ...

  5. 栈(链式栈)----C语言

    链式栈:就是一种操作受限的单向链表,对单向链表还不了解的可先看一下之前的一篇关于单向链表的随笔,链表(单向链表的建立.删除.插入.打印),理解了单向链表后再来看链式栈就比较轻松了 链式栈的操作一般含有 ...

  6. 栈的一个实例——Dijkstra的双栈算术表达式求值法

    Dijkstra的双栈算术表达式求值法,即是计算算术表达式的值,如表达式(1 + ( (2+3) * (4*5) ) ). 该方法是 使用两个栈分别存储算术表达式的运算符与操作数 忽略左括号 遇到右括 ...

  7. 栈的应用实例——计算后缀表达式

    用户输入一个后缀表达式,程序计算该后缀表达式的值并输出结果: /* postfix_expression.c */ #include "stack.h" #include < ...

  8. 数据结构 - 链栈的实行(C语言)

    数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...

  9. 数据结构 - 顺序栈的实行(C语言)

    数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪 ...

随机推荐

  1. oracle_创建表空间、用户、授权等步骤

    --创建表空间(在system用户下才可以创建) //connect system/manager as sysdba:切换到system用户 create tablespace tz datafil ...

  2. JavaScript Promises

    上篇文章介绍了JavaScript异步机制,请看这里. JavaScript异步机制带来的问题 JavaScript异步机制的主要目的是处理非阻塞,在交互的过程中,会需要一些IO操作(比如Ajax请求 ...

  3. MAIN/autoslb.py · 林語/autoslb - 码云 - 开源中国

    MAIN/autoslb.py · 林語/autoslb - 码云 - 开源中国 CloudXNS

  4. More about STALL

    http://fx.damasgate.com/more-about-stall/ In other USB classes, a sender can indicate the end of a t ...

  5. ARM JTAG 20

    http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0499b/BEHEIHCE.html he ARM JTAG 20 co ...

  6. OllyDbg 使用笔记 (十二)

    OllyDbg 使用笔记 (十二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1eQiV6aI 安装好程序 ...

  7. C#程序集系列08,设置程序集版本

    区别一个程序集,不仅仅是程序集名称,还包括程序集版本.程序集公匙.程序集文化等,本篇体验通过界面和编码设置程序集版本. □ 通过Visual Studio设置程序集版本 →右键项目,选择"属 ...

  8. Matlab的linprog解决简单线性规划问题

    一个简单的线性规划问题,使用Matlab的linprog解决 假定有n种煤,各种煤的配比为x1,x2,x3,……首先需要满足下列两个约束条件,即 x1+x2+x3……+xn=1 x1≥0, x2≥0, ...

  9. .NET:CLR via C# Manifest

    An assembly is a collection of one or more files containing type definitions and resource files. One ...

  10. Arduino + SmartAirFilter 制作智能感应的 PM 空气净化器

    先说 SmartAirFilters 知道 SmartAirFilters 源自微博上转发的非常火的那个帖子,和动辄七八千元的商用产品比,几百元的 SmartAirFilters(下面简称电扇) 确实 ...