zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    205. Isomorphic Strings
    204. Count Primes
    203. Remove Linked List Elements
    201. Bitwise AND of Numbers Range
    199. Binary Tree Right Side View
    ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
  • 原文地址:https://www.cnblogs.com/YipWingTim/p/2249136.html
Copyright © 2011-2022 走看看