0


【数据结构与算法】—— *栈 *


栈的定义和特点

定义

栈(stack)是限定只在表尾插入和删除操作的线性表

  1. 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)
  2. 不含任何数据元素的栈称为空栈

特点

  1. 先进后出
  2. 后进先出

注意

  1. 栈又被称为后进先出(Last In First Out)的线性表,简称LIFO结构
  2. 栈的插入操作,称为进栈,也叫压栈,入栈(push
  3. 栈的删除操作,称为出栈,也叫做弹栈(pop

栈的初始化

定义栈的顺序存储顺序

  1. typedef struct {
  2. int id;
  3. char* name;
  4. }ElementType;
  5. typedef struct SeqStack {
  6. ElementType elements[MAX_SIZE]; //顺序栈中用来存放数据元素的数组
  7. int top; //栈顶(数组中的下标),如果为-1则表明栈为空
  8. int length; //当前栈元素的个数
  9. };

初始化栈

  1. void InitSeqStack(SeqStack* seqstack)
  2. {
  3. seqstack->top = -1; //栈指向-1的下标
  4. seqstack->length = 0;
  5. }

入栈和出栈

入栈

  1. //向栈中压入元素,返回压入的结果(true / false)
  2. int pushStack(SeqStack* seqstack, ElementType element) {
  3. if (seqstack->top = MAX_SIZE - 1) {
  4. printf("满栈,压栈失败!");
  5. return false;
  6. }
  7. seqstack->top++; //栈顶指针+1,以便加入新的元素
  8. //将新插入的元素赋值给栈顶
  9. seqstack->elements[seqstack->top] = element;
  10. seqstack->length++;
  11. return true;
  12. }

出栈

  1. //以指针方式返回出栈的元素,返回值为出栈的结果(true / false)
  2. int PopSeqStack(SeqStack* seqstack, ElementType* element)
  3. {
  4. if (seqstack->top == -1) {
  5. printf("出栈失败!");
  6. return false;
  7. }
  8. //返回栈顶指向的元素
  9. *element = seqstack->elements[seqstack->top];
  10. seqstack->top--;
  11. seqstack->length--;
  12. return true;
  13. }

清空栈

  1. void ClearSeqStack(SeqStack* seqstack) {
  2. seqstack->top = -1;
  3. seqstack->length = 0;
  4. }

标签: 数据结构 算法

本文转载自: https://blog.csdn.net/forever_bryant/article/details/122279571
版权归原作者 玄澈_ 所有, 如有侵权,请联系我们删除。

“【数据结构与算法】—— *栈 *”的评论:

还没有评论