C语言——栈与队列

C语言------栈与队列

  • 一、栈定义
    • [1.1 是什么](#1.1 是什么)
    • [1.2 入栈&出栈](#1.2 入栈&出栈)
    • [1.3 栈顶](#1.3 栈顶)
    • [1.4 栈底](#1.4 栈底)
  • 二、队列
    • [2.1 是什么](#2.1 是什么)
    • [2.2 队列的基本操作](#2.2 队列的基本操作)
    • [2.3 队列的特点](#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;
	
} 

四、运行结果


相关推荐
Dev7z17 小时前
基于Matlab多目标粒子群优化的无人机三维路径规划与避障研究
开发语言·matlab·无人机
沐知全栈开发18 小时前
HTML 脚本:基础、应用与未来趋势
开发语言
@菜菜_达18 小时前
interact.js 前端拖拽插件
开发语言·前端·javascript
APIshop18 小时前
实战解析:苏宁易购 item_search 按关键字搜索商品API接口
开发语言·chrome·python
百***920219 小时前
java进阶1——JVM
java·开发语言·jvm
蓝桉~MLGT19 小时前
Python学习历程——Python面向对象编程详解
开发语言·python·学习
Evand J19 小时前
【MATLAB例程】2雷达二维目标跟踪滤波系统-UKF(无迹卡尔曼滤波)实现,目标匀速运动模型(带扰动)。附代码下载链接
开发语言·matlab·目标跟踪·滤波·卡尔曼滤波
larance19 小时前
Python 中的 *args 和 **kwargs
开发语言·python
Easonmax19 小时前
用 Rust 打造可复现的 ASCII 艺术渲染器:从像素到字符的完整工程实践
开发语言·后端·rust
lsx20240619 小时前
Rust 宏:深入理解与高效使用
开发语言