栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【2022/3/26】栈和队列(第一次编辑)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【2022/3/26】栈和队列(第一次编辑)

1.栈和队列基本概念

在数组中,我们可以通过索引(下标)随机访问元素。但是,在某些情况下,外面可能需要限制处理顺序,这就产生了栈和队列这两种功能受限的线性结构。

栈(stack)

先进后出:LIFO(last in first out)

栈只有一个开口,先进去的就到下面,后进来的就在上面(top),要是拿出去的话,肯定是先从开口段拿出去,所以说

队列(queue)

先进先出:FIFO(first in first out)

队列中有队首(front)和队尾(back),队首指向队列的第一个数据,队尾指向队列的最后一个数据。数据从队尾入队,从队首出对。

2.栈和队列的功能实现 1.栈的基本操作:增、删、查、改。

栈的结构可以用数组或者链表实现。

1.栈结构的声明
typedef int Type;

#define STACK_SIZE 10//栈的最大大小


typedef struct Stack
{
	Type data[STACK_SIZE];//栈的数据域
	int top;//栈顶元素下标
}stack;
2.栈的初始化

使用malloc动态开辟一个stack大小的内存

初始化栈顶的元素下标

stack* stack_init()
{
	stack* temp = (stack*)malloc(sizeof(stack));
	
	assert(temp);//断言(报错)函数(来自断言头文件):
	//当函数参数为NULL或者0时会断言(中断程序执行并弹出报错窗口)

	
	temp->top = -1;//初始化栈顶元素下标top值为-1(-1表示栈中没有数据,栈为空)
	
}
3.栈的创建

见上

4.数据入栈
void stack_push(stack* st, Type val)
{
	assert(st);//判断栈是否存在
	assert(!stack_full(st));//判断栈是否满
	st->data[++st->top] = val;//向栈顶插入数据
}
5.数据出栈

数据出栈需要取出栈顶的元素,所以要将元素下标top作自减

Type stack_pop(stack* st)
{
	assert(st);//判断栈是否存在
	assert(!stack_empty(st));//判断是否空
	return st->data[st->top--];//返回栈顶元素
}
6.获取栈顶元素

获取元素但不出栈,和数据出栈的差距是不需要作自减操作

Type stack_top(stack* st)
{
	assert(st);//判断栈是否存在

	return st->data[st->top];//返回栈顶元素
}
7.判断栈空
int stack_full(stack* st)
{
	//if (st->top >= STACK_SIZE - 1);
	//return 1;//栈满
	//return 0;//栈没满
	return st->top >= STACK_SIZE - 1;
}
8.判断栈满
int stack_empty(stack* st)
{
	return st->top==-1;//如果栈为空则返回非0值(返回1),否则返回0
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号