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

四、运行结果


相关推荐
“抚琴”的人3 小时前
C# 取消机制(CancellationTokenSource/CancellationToken)
开发语言·c#·wpf·1024程序员节·取消机制
Halo_tjn3 小时前
Java Map集合
java·开发语言·计算机
lsx2024064 小时前
DOM 创建节点
开发语言
richxu202510014 小时前
C语言<<超全.超重要>>知识点总结
c语言·开发语言
2501_916008895 小时前
用多工具组合把 iOS 混淆做成可复用的工程能力(iOS混淆|IPA加固|无源码混淆|Ipa Guard|Swift Shield)
android·开发语言·ios·小程序·uni-app·iphone·swift
胎粉仔5 小时前
Swift 初阶 —— inout 参数 & 数据独占问题
开发语言·ios·swift·1024程序员节
Lizhihao_5 小时前
Python如何写Selenium全攻略
开发语言·python
MeowKnight9585 小时前
【C】使用C语言举例说明逻辑运算符的短路特性
c语言·1024程序员节
「QT(C++)开发工程师」5 小时前
嵌入式Lua脚本编程核心概念
开发语言·lua