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;}
四、运行结果


