顺序实现:

存储结构:

 #define STACK_INIT_SIZE 10 // 存储空间初始分配量#define STACK_INCREMENT 2 // 存储空间分配增量struct SqStack{SElemType *base; // 在栈构造之前和销毁之后,base的值为NULLSElemType *top; // 栈顶指针int stacksize; // 当前已分配的存储空间,以元素为单位}; // 顺序栈


基本操作:

void InitStack(SqStack &S){ // 构造一个空栈Sif(!(S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))))exit(OVERFLOW); // 存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;}void DestroyStack(SqStack &S){ // 销毁栈S,S不再存在free(S.base);S.base=NULL;S.top=NULL;S.stacksize=0;}void ClearStack(SqStack &S){ // 把S置为空栈S.top=S.base;}Status StackEmpty(SqStack S){ // 若栈S为空栈,则返回TRUE,否则返回FALSEif(S.top==S.base)return TRUE;elsereturn FALSE;}int StackLength(SqStack S){ // 返回S的元素个数,即栈的长度return S.top-S.base;}Status GetTop(SqStack S,SElemType &e){ // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORif(S.top>S.base){e=*(S.top-1);return OK;}elsereturn ERROR;}void Push(SqStack &S,SElemType e){ // 插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize) // 栈满,追加存储空间{S.base=(SElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW); // 存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACK_INCREMENT;}*(S.top)++=e;}Status Pop(SqStack &S,SElemType &e){ // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORif(S.top==S.base)return ERROR;e=*--S.top;return OK;}void StackTraverse(SqStack S,void(*visit)(SElemType)){ // 从栈底到栈顶依次对栈中每个元素调用函数visit()while(S.top>S.base)visit(*S.base++);printf("\n");}

循环队列

存储结构

 #define MAX_QSIZE 5 // 最大队列长度+1struct SqQueue{QElemType *base; // 初始化的动态分配存储空间int front; // 头指针,若队列不空,指向队列头元素int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置};

基本操作:

  

void InitQueue(SqQueue &Q){ // 构造一个空队列QQ.base=(QElemType *)malloc(MAX_QSIZE*sizeof(QElemType));if(!Q.base) // 存储分配失败exit(OVERFLOW);Q.front=Q.rear=0;}void DestroyQueue(SqQueue &Q){ // 销毁队列Q,Q不再存在if(Q.base)free(Q.base);Q.base=NULL;Q.front=Q.rear=0;}void ClearQueue(SqQueue &Q){ // 将Q清为空队列Q.front=Q.rear=0;}Status QueueEmpty(SqQueue Q){ // 若队列Q为空队列,则返回TRUE;否则返回FALSEif(Q.front==Q.rear) // 队列空的标志return TRUE;elsereturn FALSE;}int QueueLength(SqQueue Q){ // 返回Q的元素个数,即队列的长度return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;}Status GetHead(SqQueue Q,QElemType &e){ // 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERRORif(Q.front==Q.rear) // 队列空return ERROR;e=Q.base[Q.front];return OK;}Status EnQueue(SqQueue &Q,QElemType e){ // 插入元素e为Q的新的队尾元素if((Q.rear+1)%MAX_QSIZE==Q.front) // 队列满return ERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAX_QSIZE;return OK;}Status DeQueue(SqQueue &Q,QElemType &e){ // 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERRORif(Q.front==Q.rear) // 队列空return ERROR;e=Q.base[Q.front];Q.front=(Q.front+1)%MAX_QSIZE;return OK;}void QueueTraverse(SqQueue Q,void(*vi)(QElemType)){ // 从队头到队尾依次对队列Q中每个元素调用函数vi()int i;i=Q.front;while(i!=Q.rear){vi(Q.base[i]);i=(i+1)%MAX_QSIZE;}printf("\n");}

数据结构读书笔记(三)(C语言)相关推荐

  1. 大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 21

    大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 211 第 ...

  2. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

  3. 《编程之美》读书笔记(三):烙饼问题与搜索树

    <编程之美>读书笔记三:烙饼问题与搜索树 薛笛 EMail:jxuedi#gmail.com 前面已经写了一些关于烙饼问题的简单分析,但因为那天太累有些意犹未尽,今天再充实一些内容那这个问 ...

  4. 《How Tomcat Works》读书笔记(三)--Connector(连接器)

    <How Tomcat Works>读书笔记(三)--Connector(连接器) 这是<How Tomcat Works>第三四章的读书笔记.主要写了Tomcat4.0默认的 ...

  5. TCPIP详解Protocol 读书笔记(三) IP协议讲解

    TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 文章目录 TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 IP协议 IP数据 ...

  6. 《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair

    前面两篇文章介绍了淘宝的发展历程和Java时代的变迁:             <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源             <淘宝技术这十年&g ...

  7. 《大型网站技术架构》读书笔记三:大型网站核心架构要素

    来源:http://www.cnblogs.com/edisonchou/p/3806348.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

  8. [操作系统] 操作系统真相还原读书笔记三:MBR加载loader到内存并跳转到loader执行

    为什么要有loader程序? 通过操作系统真相还原读书笔记二:编写MBR主引导记录我们已经能够正常运行MBR主引导记录(有些书籍也叫做boot)程序了,但该程序什么也没做.我们的MBR 受限于 512 ...

  9. Spring揭秘 读书笔记 三 bean的scope与FactoryBean

    本书可作为王富强所著<<Spring揭秘>>一书的读书笔记  第四章 BeanFactory的xml之旅 bean的scope scope有时被翻译为"作用域&quo ...

  10. 《你的灯亮着吗》 读书笔记三

    紧接<你的灯亮着吗>读书笔记二 4.这是谁的问题? 当别人可以妥善解决自己的问题时,不要越俎代庖,如果这是他们的麻烦,就让它成为他们的麻烦,如果一个人处于解决问题的位置,却并不受问题困扰, ...

最新文章

  1. 六月第一枪:股市震荡,下一步该做什么?
  2. 什么是多重共线性问题?如何判别多重共线性问题?怎么避免多重共线性对模型和学习的干扰?
  3. Java单元测试-快速上手Junit
  4. git用法小结(2)--git分支
  5. 移动对meta的定义
  6. 【学术相关】作者解读ICML接收论文:如何使用不止一个数据集训练神经网络模型?...
  7. error C2504: “XXXXXXX”: 未定义基类
  8. html5文件域的自动获取,HTML5 文件域+FileReader 读取文件(一)
  9. Java中不可或缺的59个小技巧,贼好用!
  10. Oracle数据库的三种标准的备份方法
  11. 无界面chrome + selenium爬虫
  12. TCMalloc内存分配器如何减少内存碎片?
  13. 怎么设置服务器上的文件夹密码,文件服务器怎么设置文件夹密码
  14. 深度学习可解释性资料整合
  15. 【Excel-2010】日期函数
  16. ZOJ 1606 Count the Colors (线段数染色)
  17. mysql 手册及优化
  18. 人脸识别之一图像采集及人脸库的建立
  19. 系统集成项目管理工程师(软考中级)重点知识、背诵版
  20. shiro框架java使用

热门文章

  1. 2018.3.26 1501 二叉树最大宽度和高度
  2. 《Android进阶之光》--多线程编程
  3. jQuery插件实战之fullcalendar(日历插件)Demo
  4. VB.NET启动外部程序
  5. 从支付宝面试题谈:怎样有效减少用户咨询的客服成本
  6. 一个鉴黄师的产品之路(11-12更新)
  7. PMCAFF|百度客户端产品:高效开发客户端产品的正确姿势
  8. 产品方法论之:菜鸟做加法,高手做减法!
  9. 块状元素的text-align对齐属性
  10. sql server 主从数据库同步 利用发布 订阅是实现