数据结构读书笔记(三)(C语言)
栈
顺序实现:
存储结构:
#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 第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 第 ...
- mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...
MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...
- 《编程之美》读书笔记(三):烙饼问题与搜索树
<编程之美>读书笔记三:烙饼问题与搜索树 薛笛 EMail:jxuedi#gmail.com 前面已经写了一些关于烙饼问题的简单分析,但因为那天太累有些意犹未尽,今天再充实一些内容那这个问 ...
- 《How Tomcat Works》读书笔记(三)--Connector(连接器)
<How Tomcat Works>读书笔记(三)--Connector(连接器) 这是<How Tomcat Works>第三四章的读书笔记.主要写了Tomcat4.0默认的 ...
- TCPIP详解Protocol 读书笔记(三) IP协议讲解
TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 文章目录 TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 IP协议 IP数据 ...
- 《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair
前面两篇文章介绍了淘宝的发展历程和Java时代的变迁: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年&g ...
- 《大型网站技术架构》读书笔记三:大型网站核心架构要素
来源:http://www.cnblogs.com/edisonchou/p/3806348.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- [操作系统] 操作系统真相还原读书笔记三:MBR加载loader到内存并跳转到loader执行
为什么要有loader程序? 通过操作系统真相还原读书笔记二:编写MBR主引导记录我们已经能够正常运行MBR主引导记录(有些书籍也叫做boot)程序了,但该程序什么也没做.我们的MBR 受限于 512 ...
- Spring揭秘 读书笔记 三 bean的scope与FactoryBean
本书可作为王富强所著<<Spring揭秘>>一书的读书笔记 第四章 BeanFactory的xml之旅 bean的scope scope有时被翻译为"作用域&quo ...
- 《你的灯亮着吗》 读书笔记三
紧接<你的灯亮着吗>读书笔记二 4.这是谁的问题? 当别人可以妥善解决自己的问题时,不要越俎代庖,如果这是他们的麻烦,就让它成为他们的麻烦,如果一个人处于解决问题的位置,却并不受问题困扰, ...
最新文章
- 六月第一枪:股市震荡,下一步该做什么?
- 什么是多重共线性问题?如何判别多重共线性问题?怎么避免多重共线性对模型和学习的干扰?
- Java单元测试-快速上手Junit
- git用法小结(2)--git分支
- 移动对meta的定义
- 【学术相关】作者解读ICML接收论文:如何使用不止一个数据集训练神经网络模型?...
- error C2504: “XXXXXXX”: 未定义基类
- html5文件域的自动获取,HTML5 文件域+FileReader 读取文件(一)
- Java中不可或缺的59个小技巧,贼好用!
- Oracle数据库的三种标准的备份方法
- 无界面chrome + selenium爬虫
- TCMalloc内存分配器如何减少内存碎片?
- 怎么设置服务器上的文件夹密码,文件服务器怎么设置文件夹密码
- 深度学习可解释性资料整合
- 【Excel-2010】日期函数
- ZOJ 1606 Count the Colors (线段数染色)
- mysql 手册及优化
- 人脸识别之一图像采集及人脸库的建立
- 系统集成项目管理工程师(软考中级)重点知识、背诵版
- shiro框架java使用