当前位置:   article > 正文

数据结构栈详解_栈的概念,由传统的铁路调度站的概念进行引入

栈的概念,由传统的铁路调度站的概念进行引入

能在栈是只某一端插入和删除的特殊线性表。

用桶堆积物品,先堆进来的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。

栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。

一个栈可以用定长为N的数组S来表示,用一个栈指针TOP指向栈顶。若TOP=0,表示栈空,TOP=N时栈满。进栈时TOP加1。退栈时TOP减1。当TOP<0时为下溢。栈指针在运算中永远指向栈顶。

 

进栈(PUSH)算法

  1. ①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
  2. ②TOP++(栈指针加1,指向进栈地址);
  3. ③S[TOP]=X,结束(X为新进栈的元素);

退栈(POP)算法

  1. ①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
  2. ②X=S[TOP],(退栈后的元素赋给X);
  3. ③TOP--,结束(栈指针减1,指向栈顶)。

进栈、出栈的c++实现过程程序:

  1. #define n 100
  2. void push(int s[],int *top,int *x)//入栈
  3. {
  4. if(*top==n)printf("overflow");
  5. else{(*top)++;s[*top]=*x;}
  6. }
  7. void pop(int s[],int *y,int *top)//出栈
  8. {
  9. if(*top==0)printf("underflow");
  10. else{*y=s[*top];(*top)--;}
  11. }

对于出栈运算中的“下溢”,程序中仅给出了一个标志信息,而在实际应用中,下溢可用来作为控制程序转移的判断标志,是十分有用的。对于入栈运算中的“上溢”,则是一种致命的错误,将使程序无法继续运行,所以要设法避免。

堆栈的数组模拟

十进制数N和其它d进制数的转换是实现计算的基本问题,解决方法很多,下面给出一种算法原理:N=(N / d)×d+N % d (其中 / 为整除运算,%为求余运算)。

例如:(1348)10=(2504)8运算过程如下:

nn/8n%8
13481684
168210
2125
202

习题

1、填空:

(9413)10=(    )8=(  )16=(     )2

2、数制转化程序

  1. #include<cstdlib>
  2. #include<iostream>
  3. using namespace std;
  4. #define size 100
  5. int a[size+1],n,d,i=0,j;
  6. int main()
  7. {
  8. cout<<"Please enter a number(N) base 10:"; cin>>n;
  9. cout<<"please enter a number(d):"; cin>>d;
  10. do
  11. {
  12. a[++i]=n%d;
  13. n=n/d;
  14. }while(n!=0);
  15. for(j=i;j>=1;j--)cout<<a[j];
  16. return 0;
  17. }

3、火车站列车调度示意图如下,假设调度站两侧的轨道为单向行驶轨道。

      ①如果进站的车厢序列为123,则可能的出站车厢序列是什么?

      ②如果进站的车厢序列为123456,问能否得到135426和435612的出站序列。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/569476
推荐阅读
相关标签
  

闽ICP备14008679号