🤖 AI文章摘要 gemini-2.0-flash-lite

这篇文章介绍了栈(Stack)这种线性数据结构,它遵循后进先出(LIFO)的原则。文章关注了栈的几个基本操作:push(入栈)、pop(出栈)、top/peek(查看栈顶元素)、isEmpty(判断栈是否为空)和isFull(判断栈是否已满)。文章还讨论了栈的两种实现方式:基于数组和基于链表。基于数组的实现需要初始化数组及相关变量,并编写溢出判断函数。基于链表的实现则需要封装节点类型,并维护栈顶指针。两种实现方式在插入和删除元素时,操作有所不同。

20d3078f184ca7b472e6974fc1bd243d

栈(Stack)

栈是一种线性数据结构,遵循元素后进先出的元素访问原则。

对于栈我们关注以下几个操作:

  • push:将元素插入到栈顶。
  • pop:将元素从栈顶删除。
  • top | peek:获取栈顶元素。
  • isEmpty:判断栈是否为空。
  • isFull:判断栈是否已满。

基于数组实现

  • 初始化数组相关变量$data$、$size$(初始0)、$capacity$以及栈顶指针$top$(初始-1)。
  • 编写溢出判断函数时,$size==0$判定栈空,$size==capacity$判定栈满。
  • 编写插入函数时,上溢判断后对$size$和$top$进行加1操作在$top$指针位置插入元素。
  • 编写弹出函数时,下溢判断后对$size$和$top$进行减1操作。

基于链表实现

  • 封装带$data$(初始为空)和$next$(初始为空)变量的节点类型,初始化栈顶指针$top$(初始为空)。
  • 编写溢出函数时,栈顶指针$top==null$判定栈空。
  • 编写插入函数时,新节点指向栈顶节点,栈顶指针更新为指向新节点。
  • 编写弹出函数时,下溢判断后将栈顶指针指向下下个节点。