灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2212回复:0

linux中的pushd命令及栈原理

楼主#
更多 发布于:2012-08-27 15:07

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

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

喜欢0 评分0
游客

返回顶部