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;
	
} 

四、运行结果


相关推荐
猫头虎6 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
YUJIANYUE7 小时前
PHP纹路验证码
开发语言·php
仟濹7 小时前
【Java基础】多态 | 打卡day2
java·开发语言
孞㐑¥7 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Re.不晚7 小时前
JAVA进阶之路——无奖问答挑战2
java·开发语言
八零后琐话7 小时前
干货:程序员必备性能分析工具——Arthas火焰图
开发语言·python
3GPP仿真实验室7 小时前
【MATLAB源码】CORDIC-QR :基于Cordic硬件级矩阵QR分解
开发语言·matlab·矩阵
知南x7 小时前
【Ascend C系列课程(高级)】(1) 算子调试+调优
c语言·开发语言
忆~遂愿7 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
Ro Jace8 小时前
计算机专业基础教材
java·开发语言