永发信息网

9. 简述以下算法的功能(其中栈和队列的元素类型均为int):

答案:1  悬赏:40  手机版
解决时间 2021-06-07 00:51
  • 提问者网友:心牵心
  • 2021-06-06 20:06

9. 简述以下算法的功能(其中栈和队列的元素类型均为int):

(1)void proc_1(Stack S)

{ int i, n, A[255];

n=0;

while(!EmptyStack(S))

{n++; Pop(&S, &A[n]);}

for(i=1; i<=n; i++)

Push(&S, A[i]);

}

(2)void proc_2(Stack S, int e)

{ Stack T; int d;

InitStack(&T);

while(!EmptyStack(S))

{ Pop(&S, &d);

if (d!=e) Push( &T, d);

}

while(!EmptyStack(T))

{ Pop(&T, &d);

Push( &S, d);

}

}

(3)void proc_3(Queue *Q)

{ Stack S; int d;

InitStack(&S);

while(!EmptyQueue(*Q))

{

DeleteQueue(Q, &d);

Push( &S, d);

}

while(!EmptyStack(S))

{ Pop(&S, &d);

EnterQueue(Q,d)

}

}

最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-06-06 20:17

proc_1 函数是将栈元素倒序.. 例如 s中元素从栈底到栈顶为1,2,3,4...n


调用后s中元素为n...4,3,2,1 但是这个函数有个bug,void proc_1(Stack S) 要讲形参定义为引用类型即


void proc_1(Stack &S),这样可以修改实参...如果只是做题而已..则忽略我以上bug之说..



void proc_2(Stack S, int e) 是删除栈s中元素值为e的元素.


第一个while循环里


将s中的非e元素值压入新栈中..例如s中有1,2,3,1,4 如果e位1,则新栈T为


2,3,4(此时由于s的出栈,则s栈已经清空了)


第二个while循环里,将T中元素压回s中



void proc_3(Queue *Q)是利用栈将队列q倒序 例如q中有元素1,2,3,4,...,n (其中n为队头)


则将q清空,压入栈中,此时临时栈s从栈底到栈顶为n,...,4,3,2,1


然后再将s弹出到q队列里,则队列元素为n,..,4,3,2,1(其中n为队头),


也就是用了队列的先进先出与栈的后进先出这个特性吧.

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯