当前位置: 首页 > news >正文

C语言——栈与队列

C语言——栈与队列

  • 一、栈定义
    • 1.1 是什么
    • 1.2 入栈&出栈
    • 1.3 栈顶
    • 1.4 栈底
  • 二、队列
    • 2.1 是什么
    • 2.2 队列的基本操作
    • 2.3 队列的特点
  • 三、具体代码
  • 四、运行结果

一、栈定义

1.1 是什么

  • 是一个特殊的数组或者链表,只能在一端进行插入和删除操作
  • 存:将数据存入栈中,称为压栈或入栈
  • 取:将数据从栈中拿走,称为弹栈或出栈,取之后该数据不再存在于栈中

1.2 入栈&出栈

  • 顺序相反:最后入栈的元素最先出栈
  • 先进后出(FILO - First In Last Out)
  • 后进先出(LIFO - Last In First Out)

1.3 栈顶

  • 数组/链表中最后一个存入的元素
  • 也是第一个被取出来的元素
  • 所有插入和删除操作都在栈顶进行
  • 栈顶是动态变化的,随着入栈和出栈操作而移动

1.4 栈底

  • 第一个被压入栈的元素所在的位置
  • 最后一个被取出来的元素
  • 栈底在整个栈的生命周期中位置固定不变
  • 当栈为空时,栈顶和栈底重合

二、队列

2.1 是什么

  • 一种特殊的数组或链表(线性表),只能在表的前端进行删除,在表的后端进行插入
  • 先进先出(FIFO - First In First Out)
  • 后进后出(LILO - Last In Last Out)

2.2 队列的基本操作

  • 入队:在队列的尾部添加新元素
  • 出队:从队列的头部移除元素
  • 队头:队列中最早进入、最先被删除的元素位置
  • 队尾:队列中最后进入、最后被删除的元素位置

2.3 队列的特点

  • 插入操作在队尾进行,删除操作在队头进行
  • 元素的处理顺序与它们进入队列的顺序完全一致
  • 适用于需要按顺序处理的场景,如消息队列、任务调度等

三、具体代码

#include<stdio.h>
#include<stdlib.h> int add(int arr[],int data,int index)
{arr[index]=data;}int get(int arr[],int index)
{int num=arr[index-1];  //把数据取出来后存到num中 arr[index-1]=NULL;return num;
}int put(int arr2[],int data,int count)
{arr2[count]=data;
}int get2(int arr2[], int count, int n)
{int num = arr2[0];for(int i = 0; i < count - 1; i++) {arr2[i] = arr2[i + 1];}return num;
}int main()
{printf("请输入一个数作为数组的长度:"); int n=0;scanf("%d",&n);int arr[n];int arr2[n];int index=0;int count=0;while(1){printf("[101]入栈\n");printf("[102]出栈\n");printf("[201]入队\n");printf("[202]出队\n"); printf("[999]退出程序\n");printf("请输操作编号:\n");int id=0;scanf("%d",&id);if(id==101){int data=0;printf("请输入要存入栈中的数据:") ; scanf("%d",&data);add(arr,data,index);index++;}else if(id==102){int num=get(arr,index);printf("从栈中取出的数据是:%d\n",num);index--;}else if(id==201){int data=0;printf("请输入要存入队列中的数据:") ; scanf("%d",&data);put(arr2,data,count);count++;}else if(id==202){int num=get2(arr2,count,n);printf("从队列中取出的数据是;%d\n",num);count--; }else if(id==999){exit(1);//需要添加<stdlib.h> }} return 0;} 

四、运行结果

在这里插入图片描述 在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/529357.html

相关文章:

  • 企业门户网站源码商丘网站制作教程
  • 云南哪里有给做网站的免费在线响应式网站自助建站
  • Java注解与反射实现日志与校验
  • docker-compose方式快速安装MySQL
  • 可信网站是否有规定必须做ps网页设计怎么做
  • AtCoder Beginner Contest 425 题解
  • 做瓷砖在什么网站上找素材好网站改标题关键词描述
  • GitHub等平台形成的开源文化正在重塑凯特
  • 惠州网站建设 鑫河南建设资格执业网站
  • Linux 下 Docker 与 ClickHouse 的安装配置及 MySQL 数据同步指南
  • 怎么建立一个个人网站企业如何注册网站
  • JAVA1025 类:继承:interface,接口继承必须实现接口方法;extends单继承 抽象类 属性 static
  • CVE-2025-50154漏洞复现与技术分析报告
  • 时间序列数据异常检测算法(6)——基于深度学习的算法
  • dw中网站建设的基本流程三亚网站建设费用
  • 深圳做网站企业手机大全
  • 基层建设 网站东莞免费网站建站模板
  • memmove函数在嵌入式开发中的应用
  • 祥云平台建站云服务器做网站视屏
  • Google 登录集成教程(Web + Expo 移动端)
  • stm32f103c8t6最小系统板(针对需要进行制作)--原理图绘制+pcb制作
  • 具身智能论文阅读:Robotic Control via Embodied Chain-of-Thought Reasoning
  • 张店学校网站建设哪家好中美俄最新军事新闻
  • 演出票务网站建设wordpress图片中文不显示解决
  • 自己用dw做网站能加声音吗网站建设兴田德润
  • 北京网站建设公司朝阳泰国公共建设网站
  • 虚拟机挂起,重启后主机连接不上虚拟机docker中的mysql?(docker网络状态假死)
  • 2018年网站开发语言wordpress免费图床插件
  • PyTorch 深度学习基础:Dataset 与 DataLoader 详解
  • 2.4寸SPI串口ILI9341芯片彩色LCD驱动