7:通过两个栈实现一个队列;   直接上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55  | template<typename T>
 class CQueue
 {
 public:
     void push(const T& val)
     {
         while (s2.size()>0)
         {
             s1.push(s2.top());
             s2.pop();
         }
         s1.push(val);
     }
     void pop()
     { 
         while (s1.size()>0)
         {
             s2.push(s1.top());
             s1.pop();
         }
         s2.pop();
     }
       T& front()
     { 
         while (s1.size()>0)
         {
             s2.push(s1.top());
             s1.pop();
         }
         return s2.top();
     }
     int size()
     {
         return s1.size()+s2.size();
     }
 private:
     stack<T> s1;
     stack<T> s2;
 };
   void CQueueTest()
 {
     CQueue<int> q;
     for (int i=0;i<10;i++)
     {
         q.push(i);
     }
     while (q.size()>0)
     {
         cout<<q.front()<<" ";
         q.pop();
     }
 }
  |  
 
 
 8:二分查找;   二分查找记住几个要点就行了,代码也就那几行,反正我现在是可以背出来了,start=0,end=数组长度-1,while(start<=end),注意溢出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  | int binarySearch(int a[],int len,int val)
 {
     int start=0;
     int end=len-1;
     int index=-1;
     while (start<=end)
     {
         index=start+(end-start)/2;
         if (a[index]==val)
         {
             return index;
         }else if (a[index]<val)
         {
             start=index+1;
         }else
         {
             end=index-1;
         }
     }
     return -1;
 }
  |  
 
 
 9:快速排序;   来自百度百科,说不清楚 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34  | void Qsort(int a[],int low,int high)
 {
     if(low>=high)
     {
         return;
     }
     int first=low;
     int last=high;
     int key=a[first];
     while(first<last)
     {
         while(first<last && a[last]>=key )--last;
         a[first]=a[last];
         while(first<last && a[first]<=key )++first;
         a[last]=a[first];
     }
     a[first]=key;
     Qsort(a,low,first-1);
     Qsort(a,last+1,high);
 }
   void QsortTest()
 {
     int a[]={1,3,5,7,9,2,4,6,8,0};
     int len=sizeof(a)/sizeof(a[0])-1;
     Qsort(a,0,len); 
     for(int i=0;i<=len;i++)
     {
         cout<<a[i]<<" ";
     } 
     cout<<endl;
 }
  |  
 
 
 10:获得一个int型的数中二进制中的个数;   核心实现就是while (num= num & (num-1)),通过这个数和比它小1的数的二进制进行&运算,将二进制中1慢慢的从后往前去掉,直到没有。 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | int Find1Count(int num)
 {
     if (num==0)
     {
         return 0;
     }
     int count=1;
     while (num= num & (num-1))
     {
         count++;
     }
     return count;
 }
  |  
 
 
 11:输入一个数组,实现一个函数,让所有奇数都在偶数前面;   两个指针,一个从前往后,一个从后往前,前面的指针遇到奇数就往后走,后面的指针遇到偶数就往前走,只要两个指针没有相遇,就奇偶交换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49  | void RecordOddEven(int A[],int len)
 {
     int i=0,j=len-1;
     while (i<j)
     {
         while (i<len && A[i]%2==1) 
             i++; 
           while (j>=0 && A[j]%2==0) 
             j--; 
           if (i<j)
         {
             A[i]^=A[j]^=A[i]^=A[j]; 
         }
     }
 }
   void RecordOddEvenTest()
 {
     int A[]={1,2,3,4,5,6,7,8,9,0,11};
     int len=sizeof(A)/sizeof(A[0]);
     RecordOddEven( A , len);
     for (int i=0;i<len;i++)
     {
         cout<<A[i]<<" ";
     }
     cout<<endl;
     for (int i=0;i<len;i++)
     {
         A[i]=2;
     }
     RecordOddEven( A , len);
     for (int i=0;i<len;i++)
     {
         cout<<A[i]<<" ";
     }
     cout<<endl;
     for (int i=0;i<len;i++)
     {
         A[i]=1;
     }
     RecordOddEven( A , len);
     for (int i=0;i<len;i++)
     {
         cout<<A[i]<<" ";
     }
 }
  |  
 
 
  |