问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是栈?请说明详细一些

发布网友 发布时间:2022-04-25 17:41

我来回答

1个回答

热心网友 时间:2023-10-22 18:05

一、基本概念
  栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。
  栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
  栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。
  栈可以用来在函数调用的时候存储断点,做递归时要用到栈!
   栈的模型二、基本算法
  
  1、进栈(PUSH)算法
  ①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
  ②置TOP=TOP+1(栈指针加1,指向进栈地址);
  ③S(TOP)=X,结束(X为新进栈的元素);
  2、退栈(POP)算法
  ①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
  ②X=S(TOP),(退栈后的元素赋给X);
  ③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
   三、栈的实现
  在pascal下的实现
  1、数组型
  Const
  m=栈表目数的上限;
  Type
  stack=array[1..m] of stype; {栈类型}
  Var
  s:stack;{栈}
  top:integer; {栈顶指针}
  2、记录型
  const
  m=栈表目数的上限;
  type
  stack=record
  elem: array[1..m] of elemtp;
  top:0..m; {栈顶指针}
  end;
  Var
  s:stack;{栈}
  在C/C++中栈的一些基本操作:
  C代码:
  /*
  @**2009/09/24
  栈的基本操作
  */
  #include <iostream>
  #define MaxSize 100
  using namespace std;
  typedef struct
  {
  int data[MaxSize];
  int top;
  }SqStack;
  void InitStack(SqStack *st) //初始化栈
  {
  st->top=-1;
  }
  int StackEmpty(SqStack *st) //判断栈为空
  {
  return (st->top==-1);
  }
  void Push(SqStack *st,int x) //元素进栈
  {
  if(st->top==MaxSize-1)
  printf("栈上溢出!\n");
  else
  {
  st->top++;
  st->data[st->top]=x;
  }
  }
  void Pop(SqStack *st) //退栈
  {
  if(st->top==-1)
  printf("栈下溢出\n");
  else
  st->top--;
  }
  int Gettop(SqStack *st) //获得栈顶元素
  {
  if(st->top==-1)
  {
  printf("栈空\n");
  return 0;
  }
  else
  return st->data[st->top];
  }
  void Display(SqStack *st) //打印栈里元素
  {
  int i;
  printf("栈中元素:");
  for(i=st->top;i>=0;--i)
  printf("%d ",st->data[i]);
  printf("\n");
  }
  int main()
  {
  SqStack L;
  SqStack *st=&L;
  InitStack(st);
  printf("栈空:%d\n",StackEmpty(st));
  for(int i=1;i<10;++i)
  Push(st,i);
  Display(st);
  printf("退一次栈\n");
  Pop(st);
  printf("栈顶元素:%d\n",Gettop(st));
  Pop(st);
  Display(st);
  return 0;
  }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么会甲状腺肿大 大学生去晋城富士康能学习到东西吗?我说的是技术上的?请往届的菁干班... 富士康(晋城)科技工业园怎么样,我是应届本科生,想应聘这个,有没有知... 郭庆林人物简介 河北大学学报(自然科学版)版杂志征稿信息 河北大学学报(自然科学版)杂志投稿信息 河北大学学报自然科学版 红警任务包 开机按Delete会出现的菜单,但是现在我开机不按Delete也出现怎么回事?要... 胃镜当时能出结果吗 栈的基本概念是什么? 栈是什么意思? 栈的读音是什么 “栈”怎么读 “栈”字怎么读? 计算机里栈是什么意思啊? 电脑脱机状态是什么意思?怎么解决? 笔记本脱机是什么? 谁知道,华为平板m6作为作为商用,支持银行的U盾吗? 凹凸世界京弥的神秘石板上写了什么? 京弥喜欢吃什么凹凸世界? 200分为我儿子起名!!! 星潮配过什么? 凹凸世界破茧金能抽吗 凹凸世界第三季京弥的bgm是什么? 微信登录的快手,登录不上了,登录需要验证码,可是以前的号已经不用了,怎么办? 凹凸世界人设什么时候全公布的?为什么2017就有人刷京弥和神近耀了? 手机号已经销毁了(补办不了),快手登录需要验证码,登录不了,怎么办? 快手登不了,必须要输入手机验证码,但是手机号早已经用不了了,已经成空号,怎么办?求解,怎么找回我的 京弥 用作名字用日语咋读(要读音哦) 程序开发中什么是栈是怎么理解的? C语言中,什么是栈,什么是堆 编程中的&quot;栈&quot;是什么意思 栈的操作原则是什么? 栈的特点是? 穿墙力好的路由器是什么牌子 无线路由器哪个牌子好穿墙信号强 什么牌子路由器好用,穿墙好 什么牌子的路由器穿墙信号好? 什么牌子的路由器好用穿墙效果好 家里的网速太慢,最里面的房间一点信号都不好,想换一个好的穿墙路由器,请教哪款,哪个牌子的好? 什么牌子的无线路由器穿墙效果最好? 无线路由器什么牌子的穿透力强 无线路由器穿墙力哪个牌子比较好 大家都用什么牌子的无线路由器 穿墙效果好 煮糖心鸡蛋怎么做 怎样打荷包蛋? 谢霆锋说糖心荷包蛋怎么煮 求下图没有文字动态GIF原图,想自己做个表情包但是没有原图,谢谢 七品芝麻官那个“我进来了,我又出去了,我又进来,我又出去了”gif表情包求发!谢谢