• Stack递归反转与递归排序


    哈哈。只考虑了两个小时左右,我已经深的递归精髓了,哈哈。

    递归解决问题真的是太容易了,归纳演绎完全诠释了数学的精妙,

    哈,这个世界好得很。。。。

    重复感叹一句,迭代的是人,递归的是神。。。。

    分析时间复杂度,公式为f(n)=2*f(n-1)+f(n-2),可以用递归求出通项,初略估计为3^n。

    View Code
     1 #include<iostream>
    2 using namespace std;
    3
    4 class Stack
    5 {
    6 private:
    7 int* elements;
    8 int top;
    9 int maxSize;
    10 public:
    11 Stack(int sz=50):top(-1),maxSize(sz)
    12 {
    13 elements=new int[maxSize];
    14 }
    15 int pop()
    16 {
    17 return elements[top--];
    18 }
    19 int push(int x)
    20 {
    21 elements[++top]=x;
    22 }
    23 bool isEmpty()
    24 {
    25 return (top==-1)?true:false;
    26 }
    27 friend ostream& operator<<(ostream& os,Stack& s);
    28 };
    29
    30 ostream& operator<<(ostream& os,Stack& s)
    31 {
    32 for(int i=s.top;i>=0;i--)
    33 os<<s.elements[i]<<"";
    34 os<<endl;
    35 return os;
    36 }
    37
    38 void reverseStack(Stack& stack)
    39 {
    40 if(stack.isEmpty())
    41 return ;
    42 int temp1=stack.pop();
    43 reverseStack(stack);
    44 if(stack.isEmpty())
    45 {
    46 stack.push(temp1);
    47 return;
    48 }
    49 int temp2=stack.pop();
    50 reverseStack(stack);
    51 stack.push(temp1);
    52 reverseStack(stack);
    53 stack.push(temp2);
    54 }
    55
    56 void sort(Stack& stack)
    57 {
    58 if(stack.isEmpty())
    59 return ;
    60 int temp1=stack.pop();
    61 sort(stack);
    62 if(stack.isEmpty())
    63 {
    64 stack.push(temp1);
    65 return ;
    66 }
    67 int temp2=stack.pop();
    68 if(temp1>temp2)
    69 {
    70 stack.push(temp2);
    71 stack.push(temp1);
    72 }
    73 else
    74 {
    75 stack.push(temp1);
    76 sort(stack);
    77 stack.push(temp2);
    78 }
    79 }
    80
    81 int main()
    82 {
    83 Stack s;
    84 s.push(3);
    85 s.push(2);
    86 s.push(4);
    87 s.push(1);
    88 s.push(5);
    89 cout<<s;
    90 reverseStack(s);
    91 cout<<s;
    92 sort(s);
    93 cout<<s;
    94 return 0;
    95 }
  • 相关阅读:
    第一个驱动
    call Eip 技巧
    Win32 XP 下和WIN7下获取Kernel32基址的方法
    利用伪造内核文件来绕过IceSword的检测
    HOOK IDT (1)第一种方法,Int 0x2e
    壳的编写 :【统一节区粒度】
    壳的编写 【文件打开选择对话框】
    71币值转换
    71打印沙漏
    介绍自己
  • 原文地址:https://www.cnblogs.com/YipWingTim/p/2249136.html
Copyright © 2020-2023  润新知