赞
踩
能在栈是只某一端插入和删除的特殊线性表。
用桶堆积物品,先堆进来的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。
栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。
一个栈可以用定长为N的数组S来表示,用一个栈指针TOP指向栈顶。若TOP=0,表示栈空,TOP=N时栈满。进栈时TOP加1。退栈时TOP减1。当TOP<0时为下溢。栈指针在运算中永远指向栈顶。
- ①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
- ②TOP++(栈指针加1,指向进栈地址);
- ③S[TOP]=X,结束(X为新进栈的元素);
- ①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
- ②X=S[TOP],(退栈后的元素赋给X);
- ③TOP--,结束(栈指针减1,指向栈顶)。
- #define n 100
- void push(int s[],int *top,int *x)//入栈
- {
- if(*top==n)printf("overflow");
- else{(*top)++;s[*top]=*x;}
- }
- void pop(int s[],int *y,int *top)//出栈
- {
- if(*top==0)printf("underflow");
- else{*y=s[*top];(*top)--;}
- }
对于出栈运算中的“下溢”,程序中仅给出了一个标志信息,而在实际应用中,下溢可用来作为控制程序转移的判断标志,是十分有用的。对于入栈运算中的“上溢”,则是一种致命的错误,将使程序无法继续运行,所以要设法避免。
十进制数N和其它d进制数的转换是实现计算的基本问题,解决方法很多,下面给出一种算法原理:N=(N / d)×d+N % d (其中 / 为整除运算,%为求余运算)。
例如:(1348)10=(2504)8运算过程如下:
n | n/8 | n%8 |
1348 | 168 | 4 |
168 | 21 | 0 |
21 | 2 | 5 |
2 | 0 | 2 |
1、填空:
(9413)10=( )8=( )16=( )2
2、数制转化程序
- #include<cstdlib>
- #include<iostream>
- using namespace std;
- #define size 100
- int a[size+1],n,d,i=0,j;
- int main()
- {
- cout<<"Please enter a number(N) base 10:"; cin>>n;
- cout<<"please enter a number(d):"; cin>>d;
- do
- {
- a[++i]=n%d;
- n=n/d;
- }while(n!=0);
- for(j=i;j>=1;j--)cout<<a[j];
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
3、火车站列车调度示意图如下,假设调度站两侧的轨道为单向行驶轨道。
①如果进站的车厢序列为123,则可能的出站车厢序列是什么?
②如果进站的车厢序列为123456,问能否得到135426和435612的出站序列。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。