数据结构
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. hash与平衡二叉树的区别

    哈希表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方 https://blog.csdn.net/duan19920101/article/det ...

  2. nyoj 0269 VF(dp)

    nyoj 0269 VF 意思大致为从1-10^9数中找到位数和为s的个数 分析:利用动态规划思想,一位一位的考虑,和s的范围为1-81 状态定义:dp[i][j] = 当前所有i位数的和为j的个数 ...

  3. Win10系列:JavaScript 动画1

    在应用程序中使用动画会使应用显得更加生动,进而给用户带来良好的视觉效果.例如,当用户将某个项添加到列表时,新项不会立即出现在列表中,而是采用动画形式到达相应位置,并且列表中的其他项也采用动画形式移动到 ...

  4. 8188EU 在AM335X MC183上以AP+STA工作

    [目的] 8188EU 在AM335X MC183上以AP+STA工作. [环境] 1.  Ubuntu 16.04发行版 2.  linux-3.2.0-psp04.06.00.11 3.  MC1 ...

  5. 用highchaarts做股票分时图

    1.首先向社区致敬给予灵感参考: https://bbs.hcharts.cn/thread-1985-1-1.html(给予参考的的例子js配置代码未进行压缩,可以清楚看到配置信息)   2.公司是 ...

  6. 为什么使用 npm Scripts 构建项目

    http://www.css88.com/archives/7025#more-7025 https://github.com/damonbauer/npm-build-boilerplate 这个我 ...

  7. MySQL 数据库备份策略:全备与增量备份

    一.备份策略1.周日全备份,周一至周六增量备份2.全备份目录/u03/backup/innobackup/full_backup3.增量备份目录/u03/backup/innobackup/incre ...

  8. PLY文件格式

    一.PLY简介 PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式,图形学领域内很多著名的模型数据,比如Stanford的三维扫描数据库(其中包括很多文章中会见到的Happy Bu ...

  9. 强震记录和GPS记录,地震波记录的区别

    强震记录的是加速度数据,但gps记录的是位移数据.这样的话,强震记录应该说是近场地震数据: 那么, 为什么不干脆用近场的地震波仪器呢,是因为,地震仪记录会限幅,导致记录不全.

  10. 关于ArrayList中的iterator返回的事迭代器实例问题。

    Arraylist是一个具体的类,它并没有定义它自己的iterator()方法,,它只是从AbstractList 这个抽象类中继承了iterator()这个方法,而AbstractList 中的it ...