利用递归函数逆序一个栈(C语言实现)

来源:互联网 发布:pdf转换word软件 编辑:程序博客网 时间:2024/05/17 08:43

利用递归函数将一个栈逆序,不能申请新的数据结构。

参考了常用解法,即两个递归函数嵌套使用,第一个递归函数用于获取栈的栈底元素,另一个递归函数用于逆序这个栈。

代码如下:

int getBottomElement(element *data){int result=pop(data);//弹出一个元素if(isEmpty(data)==1)return result;else{int last=getBottomElement(data);printf("getBottomElement函数被调用\n");push(result,data);return last;}}void reverseStack(element *data){if(isEmpty(data)==1)return;printf("reverse函数被调用\n");int i=getBottomElement(data);reverseStack(data);//每一层调用时这个data的变量值都是上一层取出栈底元素之后的值,所以这个栈再每一次递归中就会减少一个元素,直至空栈push(i,data);}void main(){    int i=0;    int value=0;    element stack;    stack=init();        for(i=0;i<MAX_STACK_SIZE;i++)    {        printf("please input value to push into stack:\n");                scanf("%d",&value);                push(value,&stack);            }    reverseStack(&stack);    print(&stack);}

这个解法充分利用了递归函数的特点,将递归函数的函数栈作为另一个数据结构用于逆序排列。

递归函数类似于一个循环处理的过程,递归结束的条件非常重要,同时递归是从最里面的一层函数调用层层向上返回。

0 0