数据结构读书笔记(三)(C语言)
栈
顺序实现:
存储结构:
- #define STACK_INIT_SIZE 10 // 存储空间初始分配量
- #define STACK_INCREMENT 2 // 存储空间分配增量
- struct SqStack
- {
- SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
- SElemType *top; // 栈顶指针
- int stacksize; // 当前已分配的存储空间,以元素为单位
- }; // 顺序栈
基本操作:
- void InitStack(SqStack &S)
- { // 构造一个空栈S
- if(!(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,否则返回FALSE
- if(S.top==S.base)
- return TRUE;
- else
- return FALSE;
- }
- int StackLength(SqStack S)
- { // 返回S的元素个数,即栈的长度
- return S.top-S.base;
- }
- Status GetTop(SqStack S,SElemType &e)
- { // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
- if(S.top>S.base)
- {
- e=*(S.top-1);
- return OK;
- }
- else
- return 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;否则返回ERROR
- if(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 // 最大队列长度+1
- struct SqQueue
- {
- QElemType *base; // 初始化的动态分配存储空间
- int front; // 头指针,若队列不空,指向队列头元素
- int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
- };
基本操作:
- void InitQueue(SqQueue &Q)
- { // 构造一个空队列Q
- Q.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;否则返回FALSE
- if(Q.front==Q.rear) // 队列空的标志
- return TRUE;
- else
- return FALSE;
- }
- int QueueLength(SqQueue Q)
- { // 返回Q的元素个数,即队列的长度
- return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;
- }
- Status GetHead(SqQueue Q,QElemType &e)
- { // 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR
- if(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;否则返回ERROR
- if(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语言)的更多相关文章
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)
1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...
- ES6读书笔记(三)
前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,<ES6读书笔记(二)>,现在为第三篇,本篇内容包括: 一.Promise 二.Iterator和for of循 ...
- 【记】《.net之美》之读书笔记(一) C#语言基础
前言 工作之中,我们习惯了碰到任务就直接去实现其业务逻辑,但是C#真正的一些基础知识,在我们久而久之不去了解巩固的情况下,就会忽视掉.我深知自己正一步步走向只知用法却不知原理的深渊,所以工作之余,一直 ...
- 《你必须知道的.NET》读书笔记三:体验OO之美
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.依赖也是哲学 (1)本质诠释:“不要调用我们,我们会调用你” (2)依赖和耦合: ①无依赖,无耦合 ...
- Spring揭秘 读书笔记 三 bean的scope与FactoryBean
本书可作为王富强所著<<Spring揭秘>>一书的读书笔记 第四章 BeanFactory的xml之旅 bean的scope scope有时被翻译为"作用域&quo ...
- Struts2技术内幕 读书笔记三 表示层的困惑
表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
- R语言实战读书笔记(三)图形初阶
这篇简直是白写了,写到后面发现ggplot明显更好用 3.1 使用图形 attach(mtcars)plot(wt, mpg) #x轴wt,y轴pgabline(lm(mpg ~ wt)) #画线拟合 ...
随机推荐
- Android 开发笔记 “SQLite”
SQLite 入门与分析 1.SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分.正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源, ...
- C语言之ASCII码
ASCII码 ASCII码值在65~90之间,为大写字母.ASCII码值在97~122之间,为小写字母.ASCII码值在48~57之间,为数字.ASCII码值不在上述3个范围内,为特殊字符.
- Chrome Firefox 自定义背景色
Chrome有个自定义背景色的文件 Custom.css 默认里面什么字都没写 html, body {background-color: #e0dcc0!important;} 这个颜色 ...
- 转:按需加载html 图片 css js
按需加载是前端性能优化中的一项重要措施,按需加载是如何定义的呢?顾名思义,指的是当用户触发了动作时才加载对应的功能.触发的动作,是要看具体的业务场景而言,包括但不限于以下几个情况:鼠标点击.输入文字. ...
- Maxicode码
Maxicode的缘起和发展 1980年代晚期,美国知名的UPS(United Parcel Service)快递公司认知到利用机器辨读资讯可有效改善作业效率.提高服务品质,故从1987年开始着手於机 ...
- Qt技巧:Win7下打包发布Qt程序(解释的比较清楚,把exe和dll伪装合并成一个文件)
转自:http://www.stardrad.com/blog/qt-5%E7%A8%8B%E5%BA%8F%E5%9C%A8windows%E4%B8%8A%E7%9A%84%E5%8F%91%E5 ...
- [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET
Women Techmaker 北京站 [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素 发表于2 ...
- ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
- CSS实现背景图尺寸不随浏览器大小而变化的两种方法
一些网站的首页背景图尺寸不随浏览器缩放而变化,本例使用CSS 实现背景图尺寸不随浏览器缩放而变化,方法一. 把图片作为background,方法二使用img标签.喜欢的朋友可以看看 一些网站的首页 ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...