栈和队列被称为插入和删除受限制的线性表。
(一)栈的概念:
①:栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO ( Last In First Out )的原则。②:压栈:栈的插入操作叫做进栈 / 压栈 / 入栈, 入数据在栈顶 。③:出栈:栈的删除操作叫做出栈。 出数据也在栈顶 。
①:栈的顺序存储结构简称“顺序栈”;
②:顺序栈利用一组连续地址的存储单元(数组)依次存放从栈低到栈顶的数据元素,通常用一维数组存放栈的元素,同时设top“箭头”(有些地方称top为“指针”,但不是C语言中的指针,top是一个整型变量,所以为了避免混淆,小编称其为“箭头”)指示栈顶元素的当前位置,空栈时top值为0。
因为栈是特殊的线性表,所以栈的实现和线性表差不多,只是多了一个top“箭头”;
#define N 10 typedef struct Stack { int data[N]; int top; }Stack;
静态实现有一个很大的缺点就是扩容不方便,所以具体实现我们会使用动态实现;
注意:理论上顺序表的结构比栈的链式存储结构要方便许多,但顺序存储在实际运用中有一些缺点,特别扩容不方便;所以具体实现以及以后练题我们会使用栈的链式存储;
因为线性表在之前的文章已经实现过了 ,而栈的实现和线性表差不多,所以小编就快速实现;具体操作可以参考小编之前的文章;
在原基础上多了一个top箭头用于指向栈顶位置;
typedef int DataType; typedef struct Stack { DataType* head; int top; int catacity; }ST;
//初始化 void STinit(ST* ps) { assert(ps); //刚开始没有元素,所以top指向-1,因为数组下标从0开始 ps->top = -1; ps->catacity = 0; ps->a = NULL; }