用链表实现栈----《数据结构与算法分析----C语言描述》
一、头文件:
- #ifndef _STACK_LINK_H_
- #define _STACK_LINK_H_
- struct stack_record;
- typedef struct stack_record* stack;
- typedef int elementType;
- struct link_node;
- typedef struct link_node node;
- int IsEmpty(stack s);
- int IsFull(stack s);
- stack creatStack(int maxElement);
- void disposeStack(stack s);
- void makeEmpty(stack s);
- void pushElement(elementType x,stack s);
- elementType Top(stack s);
- void popElement(stack s);
- elementType topAndpop(stack s);
- #define EMPTY 0
- #define MINISIZE (5)
- struct stack_record
- {
- int capacity;
- int size;
- node *item;
- };
- struct link_node
- {
- elementType data;
- node *next;
- };
- #endif
二、c文件:
- #include <stdio.h>
- #include <stdlib.h>
- #include "stack_link.h"
- #define MAXSIZE 100
- int IsEmpty(stack s)
- {
- return s->size == 0;
- }
- int IsFull(stack s)
- {
- return s->size == s->capacity;
- }
- stack creatStack(int maxElement)
- {
- stack s;
- s = (stack)malloc(sizeof(struct stack_record));
- if(s == NULL)
- {
- printf("the stack alloca error\n");
- exit(-1);
- }
- s->capacity = MAXSIZE;
- s->item = NULL;
- s->size = 0;
- return s;
- }
- void disposeStack(stack s)
- {
- if(s)
- {
- if(s->size)
- makeEmpty(s);
- free(s);
- }
- }
- void makeEmpty(stack s)
- {
- if(s)
- {
- while(s->size)
- {
- popElement(s);
- }
- }
- }
- void pushElement(elementType x,stack s)
- {
- if(s)
- {
- if(IsFull(s))
- return;
- node *ptr = (node *)malloc(sizeof(node));
- if(NULL == ptr)
- {
- printf("the node alloc is error\n");
- exit(-2);
- }
- ptr->data = x;
- ptr->next = s->item;
- s->item = ptr;
- s->size++;
- }
- }
- elementType Top(stack s)
- {
- if(s)
- {
- if(IsEmpty(s))
- {
- printf("the stack is empty\n");
- exit(-3);
- }
- return s->item->data;
- }
- }
- void popElement(stack s)
- {
- if(IsEmpty(s) )
- {
- printf("the stack is empty\n");
- exit(-4);
- }
- node *ptr = NULL;
- ptr = s->item->next;
- free(s->item);
- s->item = ptr;
- s->size--;
- }
- elementType topAndpop(stack s)
- {
- if(s)
- {
- if(IsEmpty(s))
- {
- printf("the stack is empty\n");
- exit(-5);
- }
- elementType x;
- x = Top(s);
- popElement(s);
- return x;
- }
- }
- int main(int argc,char *argv[])
- {
- stack s;
- s = creatStack(10);
- int i = 0;
- elementType x;
- while(++i <= 10)
- {
- pushElement(i,s);
- printf("the stack size is %d\n",s->size);
- x = Top(s);
- printf("the stack top is %d\n",x);
- }
- while(s->size)
- {
- x = topAndpop(s);
- printf("the top stack is %d\n",x);
- sleep(1);
- }
- disposeStack(s);
- return 0;
- }
三、打印输出:
- the stack size is 1
- the stack top is 1
- the stack size is 2
- the stack top is 2
- the stack size is 3
- the stack top is 3
- the stack size is 4
- the stack top is 4
- the stack size is 5
- the stack top is 5
- the stack size is 6
- the stack top is 6
- the stack size is 7
- the stack top is 7
- the stack size is 8
- the stack top is 8
- the stack size is 9
- the stack top is 9
- the stack size is 10
- the stack top is 10
- the top stack is 10
- the top stack is 9
- the top stack is 8
- the top stack is 7
- the top stack is 6
- the top stack is 5
- the top stack is 4
- the top stack is 3
- the top stack is 2
- the top stack is 1
用链表实现栈----《数据结构与算法分析----C语言描述》的更多相关文章
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)
开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...
- C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载
维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...
- 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)
#include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...
- 《数据结构与算法分析-Java语言描述》 分享下载
书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...
- 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes
表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.01) : 栈(Stack)
这次的数据结构是一种特殊的线性表:栈(Stack) 栈的特点是后入先出(LIFO),可见的只有栈顶的一个元素. 栈在程序中的地位非常重要,其中最重要的应用就是函数的调用.每次函数调用时都会创建该函数的 ...
- 使用链表实现队列------《数据结构与算法分析-C语言描述》
经过ubuntu的gcc验证 一.头文件 que_link.h #ifndef _QUE_LINK_H_ #define _QUE_LINK_H_ struct que_record; typedef ...
- 读书笔记:《数据结构与算法分析Java语言描述》
目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...
随机推荐
- MySQL数据库触发器(trigger)
MySQL触发器(trigger):监视某种情况并触发某种操作 一:四要素 触发时间:before/after 地点:table 监视操作:insert/update/delete 触发操作:inse ...
- (1)前言——(10)jquery项目的历史(History of the jQuery project)
This book covers the functionality and syntax of jQuery 1.6.x, the latest version at the time of wri ...
- 52. 模版和设计元素——Lotus Notes的代码重用
不论是理论上还是实用上,代码重用都是编程的一个重要议题.可以从两个角度来讨论代码重用. 一是逻辑上代码以怎样的方式被重用.既可以通过面向对象的思想普及以来耳熟能详的继承的方式.比如先建了一个车的基类, ...
- .NET常见面试题
面试题 1 什么是 CTS.CLS 和CLR 公共语言运行库(CLR)是一个CLI 的一个实现,包含了.NET 运行引擎和符合 CLI 的类库. 通用类型系统(CTS)包含在微软公司提交的 CLI ...
- 【linux】常用网站
Kernel: http://www.kernel.org/ LSB (Linux Standard Base): http://www.linuxbase.org/ ELC(Embedded Lin ...
- BSGS_Baby steps giant steps算法
BSGS这个主要是用来解决这个题: A^x=B(mod C)(C是质数),都是整数,已知A.B.C求x. 在具体的题目中,C一般是所有可能事件的总数. 解: 设m = ceil(sqrt(C))(ce ...
- Android Sip学习(三)Android Voip实现
Android Sip学习(三)Android Voip实现 Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...
- MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录
MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录 MySQL内存表(MEMORY)说明
- LA - 4043 - Ants
题意:n只蚂蚁,n棵树,每只蚂蚁要连一棵树,连线(直线)不能相交,给出n只蚂蚁和n棵树的坐标,输出n只蚂蚁所配对的树的编号(1 <= n <= 100, -10000 <= 坐标x, ...
- NEU 1173: 这是物理学的奇迹!! 分解质数
1173: 这是物理学的奇迹!! 题目描述 goagain在做物理电学实验时需要一个2Ω的电阻,但是他发现他的实验台上只剩下了3Ω,4Ω,5Ω,6Ω的电阻若干,于是goagain把两个4Ω的电阻并联起 ...