好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

linux中的pushd命令及栈原理 - Linux操作系统:Ubun


linux中的pushd命令及栈原理

 

今天看了linux下面的pushd的命令:感觉不错。

我们可以将目录pushd到目录栈中,然后通过pushd进行切换目录。

但是这个命令多了一个功能 +n和-n。就将对栈中的元素进行移动,其实pushd不添加参数就是移动栈中元素的。

这个是怎么移动的哪,我看网上介绍不是很清楚,自己打开数据结构,看了一下。

栈是限定在表的一端进行元素的插入和删除运算的线性表,将进行插入和删除的这一端称为栈顶,另一端称为栈底。
 

栈的基本操作有下面几类:

(1)InitStack(S)

     构造一个空栈S。

(2)StackEmpty(S)

     判栈空。若S为空栈,则返回TRUE,否则返回FALSE。

(3)StackFull(S)

     判栈满。若S为满栈,则返回TRUE,否则返回FALSE。
 

注意:该运算只适用于栈的顺序存储结构。

(4)Push(S,x)

     进栈。若栈S不满,则将元素x插入S的栈顶。

(5)Pop(S)

     退栈。若栈S非空,则将S的栈顶元素删去,并返回该元素。

(6)StackTop(S)

     取栈顶元素。若栈S非空,则返回栈顶元素,但不改变栈的状态。
 

对于栈的基本操作命令:

1,操作1,2,3我们就不用考虑了,这三个命令在调用之前已经处理了,对我们使用者是透明的。

2,操作4,进栈:pushd 目录  就是这个操作

3,操作5,退栈:popd  就是这个操作

4,操作6,取栈顶元素,好像没有这个操作,但其实用dirs查看这个栈中所有元素。

加强的栈功能:

1,对于没有参数的pushd,其实就是将栈顶的第一个元素和第二元素交换位置。

提示:这个操作的所有操作,当前目录显示的有当前栈中第一个元素。

2,push +n和-n是我主要解释的。  www.2cto.com  

这个命令中有队列的影子的。栈中元素移动时,都是从栈顶移出,然后插入到栈底。

(1)我们将栈按像数组一样进行编号,从栈顶开始:0,1,2,3 ...

pushd +n 不是将编号为n的移到栈顶,移出的0到n-1个元素依次插到栈底。

例如:栈中的元素为a,b,c,d

pushd +1后元素为b,c,d,a

pushd +2后元素为c,d,a,b

pushd +0后元素没有变化:a,b,c,d
 

(2)对于pushd -n命令和上面一样,只是编号不一样。

pushd -n,将编号为-n的移到栈顶,移出的从栈顶到-n+1的元素依次插到栈底。

例如:栈中的元素为a,b,c,d

pushd -1后元素为c,d,a,b

pushd -2后元素为b,c,d,a

pushd -0后元素没有变化:d,a,b,c

(3)总结一下:

假设有n个元素,那么pushd -i 与pushd +(n-1-i) 是相同的。

例如有4个元素的话:

pushd -2与pushd +(4-1-2)是相同的。

这样就清楚这个命令对栈中元素是怎么移动的了。

 

 

作者 kongweile

查看更多关于linux中的pushd命令及栈原理 - Linux操作系统:Ubun的详细内容...

  阅读:86次