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是我主要解释的。

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

  (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命令和上面一样,只是编号不一样。

  这次编号从栈底从开始(假如有4个元素):-3,-2,-1,-0

  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)是相同的。

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

 

 
 
 

  

posted @ 2016-05-14 11:49  亦非台  阅读(342)  评论(0)    收藏  举报