数据结构
1.保存数据 2.处理数据
数组+操作
增查删改

栈和队列
是一种操作受限的线性表

栈 是先进后出 是在一端进行插入删除的操作--->栈顶 另一端叫做栈底(栈和栈区是两个概念)(是一种数据结构)
队列 是先进先出 是在两端进行插入删除的操作 在插入的一端叫做队尾 在删除的一端叫做队头

栈 需要回退操作 退回上一步(悔棋)
队列 多用于和时间有关的 比如消息(鼠标点击消息 键盘消息) 先来的先处理-->服务器请求
(举个比较恶心的例子 吃了吐--->栈 吃了拉---->队列)

例子
1、进制转换(栈)
2、队列的例子 入队 出队

测试代码笔记如下:

 //用栈实现 进制转换
#if 0
#include<stdio.h>
#include<stdbool.h> //判断真假 c++中的
//栈 1.线性表 (顺序表 链表的实现)
struct STACK
{
int arr[]; //数组
int size; //栈的大小 栈中最多可以存放多少的元素
int top; //栈顶 栈中不关心有多少元素 关心的是插入删除的位置
}; //初始化栈
void initStack(struct STACK*p)
{
p->top = ; //表示没有任何元素
p->size = ; //栈的大小
//栈顶就是即将要插入的数据的位置
//栈 是否是满 top==size
//top==0 表示栈中没有元素
} //栈的插入 入栈/压栈
void pushStack(struct STACK*p,int data)
{
if (p->top >= p->size)//表示栈满
{
printf("栈满,压栈失败!\n");
}
else
{
p->arr[p->top++] = data;
}
} //栈的删除 出栈
int popStack(struct STACK*p) //出一个元素 需要在外面得到这个元素 需要返回值
{
if (p->top <= ) //栈空
{
printf("没有元素,出栈失败!\n");
return ;
}
else
{
return p->arr[--(p->top)]; //出最后一个元素
}
} //判断栈是否为空
int isStackEmpty(struct STACK*p) //操作栈的时候会用
{
return p->top <= ; //返回值是1表示空 不然栈没空
} int main()
{
//进制转换 代码实现 不断除2求余 直到除到0的位置
//栈实现 余数栈
//十进制转换
int x = ;
printf("要转换的值是:%d\n", x);
//scanf_s("%d", &x);
struct STACK stack;
initStack(&stack); //栈初始化
while (x != )
{
pushStack(&stack, x % );
x /= ; //或x>>=1; 右移等于1相当于除以二 比除法快
}
//入完栈之后 出栈
printf("转换出的二进制是:");
while (isStackEmpty(&stack) != ) //表示栈没有空
{
printf("%d", popStack(&stack)); //出栈 %x打印16进制
}
//对于其他进制
//入栈 做处理 10-15 用A-F替换 -->if
getchar();
return ;
}
#endif /***************************分割线*********************************/
//队列的例子 队尾插入 队头删除
#if 1
//队
struct QUEUE
{
int arr[];
int size;
int begin; //队头
int end; //队尾
}; //初始化
void initQueue(struct QUEUE*p)
{
p->begin = p->end = ; //刚刚开始队列没有元素
p->size = ; //数组下标
/*
begin==end 队空
end+1-->begin的位置 队满
*/
} //入队 队尾操作
void inQueue(struct QUEUE*p, int data)
{
if ((p->end + ) % p->size == p->begin) //判断队列是否已满
{
return; //队列已满情况 只是表示退出函数 没有别的意思
}
else
{
p->arr[p->end++] = data; //插入
p->end %= p->size; //保证end+1之后 最后的end还是小于size
}
} //出队 队头操作
int outQueue(struct QUEUE*p)
{
if (p->begin == p->end) //队空 不操作 判断队是否满
{
return ; //返回一个0
}
else
{
int x = p->arr[p->begin]; //要出队的元素
p->begin = (p->begin + ) % p->size; //防止begin往后移动之后 等于size
return x; //返回要出队的元素
}
} int main()
{
struct QUEUE queue;
initQueue(&queue);
int y = ;
//入队
while (y != )
{
inQueue(&queue, y % ); //将余数入队
y >>= ;
}
//出队
while (queue.begin!=queue.end)
{
printf("%x", outQueue(&queue));
} getchar();
return ;
}
#endif #if 0
//ctf比赛 密码部分
//flag{c4es4r_variation}
//bg[`sZ*Zg'dPfP`VM_SXVd
#include<stdio.h>
int main()
{
int arr[] = { , , , , , , , , , , , , , , , , , , , , , };
printf("原样输出:\n");
for (int i = ; i < ; ++i)
{
printf("%d\t", arr[i]);
}
printf("\n");
printf("进行运算:\n");
int brr[] = { ,,,,,,,,,,,,,,,,,,,,, };
printf("结果输出:\n");
int crr[];
for (int i = ; i < ;++i)
crr[i] = arr[i] + brr[i];
for (int i = ; i < ; ++i)
printf("%d\t", crr[i]);
getchar();
return ;
}
#endif

附:

2019-03-31  19:41:48

C++学习(三十)(C语言部分)之 栈和队列的更多相关文章

  1. Java开发学习(三十六)----SpringBoot三种配置文件解析

    一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...

  2. Salesforce LWC学习(三十九) lwc下quick action的recordId的问题和解决方案

    本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:hasRecordId/documentation ...

  3. ElasticSearch7.3学习(三十二)----logstash三大插件(input、filter、output)及其综合示例

    1. Logstash输入插件 1.1 input介绍 logstash支持很多数据源,比如说file,http,jdbc,s3等等 图片上面只是一少部分.详情见网址:https://www.elas ...

  4. Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析

    重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...

  5. 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式

    目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...

  6. ballerina 学习 三十 扩展开发(一)

    ballerina 主要是分为两大类 基于ballerina 语言开发的,一般是客户端的connector 使用java语言开发的(类似的基于jvm的都可以),一般是注解以及进行构件生成 baller ...

  7. 学习笔记:oracle学习三:SQL语言基础之检索数据:简单查询、筛选查询

    目录 1. 检索数据 1.1 简单查询 1.1.1 检索所有列 1.1.2 检索指定的列 1.1.3 查询日期列 1.1.4 带有表达式的select语句 1.1.5 为列指定别名 1.1.6 显示不 ...

  8. Salesforce LWC学习(三十) lwc superbadge项目实现

    本篇参考:https://trailhead.salesforce.com/content/learn/superbadges/superbadge_lwc_specialist 我们做lwc的学习时 ...

  9. Salesforce LWC学习(三十五) 使用 REST API实现不写Apex的批量创建/更新数据

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/resources_compo ...

  10. Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析

    一.SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程. 使用了 Spring 框架后已经简化了我 ...

随机推荐

  1. linux下grep命令详解

    参数: -a 或 --text : 不要忽略二进制的数据. -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行 ...

  2. zabbix3.4.7集成grafana详细步骤

    打开官方网站下载grafana并安装 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1. ...

  3. laravel 的 intervention-image 图像处理笔记(备用)

    原文地址: http://blog.csdn.net/beyond__devil/article/details/62230610

  4. Win10系列:VC++ Direct3D图形绘制1

    通过前面的介绍,相信读者已经了解了如何新建一个用于开发Direct3D应用程序的项目模版,以及这个项目模版中用于绘制立体图形的主要函数.在本小节中,将通过一个具体的示例来介绍如何使用Visual St ...

  5. 网卡驱动-BD详解(缓存描述符 Buffer Description)

    DMA介绍(BD的引入) 网络设备的核心处理模块是一个被称作 DMA(Direct Memory Access)的控制器,DMA 模块能够协助处理器处理数据收发.对于数据发送来说,它能够将组织好的数据 ...

  6. bzoj2946

    题解: 和poj1226差不多 把翻转去掉 然后不要忘记开大数组和二分的上限答案 代码: #include<bits/stdc++.h> using namespace std; type ...

  7. CSS(一)属性--border边框

    HTML代码 <body> <div>举个例子</div> </body> CSS代码: div{ font-size:12px;  //字体大小,默认 ...

  8. Java 如何抛出异常、自定义异常

    Java错误与异常的基本概念: 1.java中异常均继承自Throwable,其有两个重要的直接子类error与exception. 2.java错误error,大部分是由虚拟机爆出来的错误,是程序无 ...

  9. 《十天学会单片机和C语言编程》

    <十天学会单片机和C语言编程> 大家注意了这个文件只有最新版迅雷可以下载,下面的lesson几就是第几课.点击右键使用迅雷下载. ed2k://|file|[十天学会单片机和C语言编程]. ...

  10. PropertiesUtil 读取properties

    package com.midea.clean.util; import java.io.InputStream; import java.io.UnsupportedEncodingExceptio ...