第三章 数据结构与算法——栈和

栈和队列被称为插入和删除受限制的线性表。

一、栈的基本概念

(一)栈的概念:

①:栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO Last In First Out )的原则。
②:压栈:栈的插入操作叫做进栈 / 压栈 / 入栈, 入数据在栈顶
③:出栈:栈的删除操作叫做出栈。 出数据也在栈顶
第三章 数据结构与算法——栈和_第1张图片

二、栈的顺序存储结构(栈的实现)

(一)、特点

①:栈的顺序存储结构简称“顺序栈”;

②:顺序栈利用一组连续地址的存储单元(数组)依次存放从栈低到栈顶的数据元素,通常用一维数组存放栈的元素,同时设top“箭头”(有些地方称top为“指针”,但不是C语言中的指针,top是一个整型变量,所以为了避免混淆,小编称其为“箭头”)指示栈顶元素的当前位置,空栈时top值为0。

(二)、静态实现

因为栈是特殊的线性表,所以栈的实现和线性表差不多,只是多了一个top“箭头”;

#define N 10

typedef struct Stack
{
	int data[N];
	int top;
}Stack;

静态实现有一个很大的缺点就是扩容不方便,所以具体实现我们会使用动态实现;

注意:理论上顺序表的结构比栈的链式存储结构要方便许多,但顺序存储在实际运用中有一些缺点,特别扩容不方便;所以具体实现以及以后练题我们会使用栈的链式存储;

(三)、动态实现(优先)

因为线性表在之前的文章已经实现过了 ,而栈的实现和线性表差不多,所以小编就快速实现;具体操作可以参考小编之前的文章;

⭐️ (三.1)、定义

在原基础上多了一个top箭头用于指向栈顶位置;

typedef int DataType;
typedef struct Stack
{
	DataType* head;
	int top;
	int catacity;
}ST;
⭐️(三.2)、初始化
//初始化
void STinit(ST* ps)
{
	assert(ps);
	//刚开始没有元素,所以top指向-1,因为数组下标从0开始
	ps->top = -1;
	ps->catacity = 0;
	ps->a = NULL;
}

你可能感兴趣的:(java,数据结构,开发语言)