数据结构
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. json模块&xml

    json模块将数据修改成字符串,方便其他语言进行识别. 只认双引号,不认单引号.使用json.dumps的操作步骤 先将单引号修改成单引号 将变量使用单引号引起来 将数据类型编程json字符串 jso ...

  2. Thêm Một Lần Đau--错错错--IPA--越南语

    越南国际天团HKT的名曲.

  3. 关于A中用到B, B中用到A的问题

    //A.h #ifndef AH #define AH class B; class A { public: B* b; void setB(); ~A(); }; #endif //B.h #ifn ...

  4. core1.1 升级到 2.0

    1.直接修改项目 1.1 改成 2.0 Startup 的修改 去除构造函数中下面的代码 var builder = new ConfigurationBuilder() .SetBasePath(e ...

  5. Centos7部署Flannel网络(八)

    1.为Flannel生成证书 [root@linux-node1 ssl]# vim flanneld-csr.json { "CN": "flanneld", ...

  6. SharePoint Framework 构建你的第一个web部件(一)

    博客地址:http://blog.csdn.net/FoxDave SharePoint客户端web部件是出现在SharePoint页面的控件,但却是在浏览器本地运行的.他们是SharePoint ...

  7. dos命令:批处理

    批处理 一.call命令 1.介绍 从批处理程序调用另一个批处理程序. 2.语法 CALL [drive:][path]filename [batch-parameters] batch-parame ...

  8. C#清理所有正在使用的资源

    namespace QQFrm{    partial class Form1    {        /// <summary>        /// 必需的设计器变量.        ...

  9. python django字段类型

    <1> CharField #字符串字段, 用于较短的字符串. #CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符 ...

  10. 元组类型&字典类型

    一.元组 元组:是一个不可变的列表 用途:当需要记录多个同种属性的值,并且只有读没有改的需求是,这时候应该用到元组 定义方式:在()内用逗号费隔开多个任意类型的元素 ***注意***     当元组只 ...