데이터 구조 면접 문제 (답안 포함)

1.          (              )
4.             (             )
5.            (D)
     A.       B.        C.          D.         
6.         (B)A.                 B.         
C.                 D.             
7.            (         )
8.     ,         (       )
9.          (                  )
10.   L=(a1,a2,a3,……ai,……an),        (D)
     A.                    B.            
     C.                      
     D.            ,                        
11.             ,              (D)
A.       B.          C.        D.        
12.                        (         、         )
13.       ,        (    1)
14.    5      ,        (31)
15.  3        (5   )
16.        3     , 8   1   ,            (13)
17.            dabec,       debac,         (cedba)
18.                   ABDEGCFH DBGEACHF,           (DGEBHFCA)
19.               abdgcefh,         dgbaechf,              (gdbehfca)
20.       :     、       、           。 
1.      ,    (             )
2.      ,                   (   )
  :          :   、   、           。
3.                    (  、  、  )
4.          (                 )
5.           (             ) 
6.         (           ) 
7.         (C)
A.                 
B.                 (   )   
C.                         
D.                      
8.              ,           、            ,  (       )
9.      ,               (C)
A.       B.         C.         D.       
10.      ,    (B)
A.                   
B.                 
C.                        
D.                  
11.          (               )
12.          (                 )
13.                         ,         (          )
14.               (C)A.  B.    C. D.   
15.        ,             (B)
A.       B.             C.            D.   
16.           (  )  。
17.              (D)A.         B.         
C.                      D.          
20.                 (      ,         ) 
21.           ,            ,           ,             (  ) ,       ,                         。
22.              (C)A.           B.             C.                       D.           
23.     ,    (D)A.                        
B.                       C.                         ,                  D.                         ,              
24.         (A)A.              B.          
C.                                           D.        
25.    L=(a1,a2,a3,……ai,……an),        (D)
A.                       B.            
C.                      D.              ,                        
26.             ,              (        ) 
27.          (B)A.                      B.         
C.                       D.             
28.         head    ( p   ),  (p->next=head)
29.       ,          (         ) 
30.  (D) ,               ,                    。A.                 B.                C.                D.    
31.                  (C)A.        B.   C.         D. 
32.       ,        (    1)
33.  3        (5   ) 
34.         8        (128)  :2K-1
35.     5      ,        (16)  :2n-1
36.     5      ,  (31)   。  :2n-1
37.          699   ,              (350)
  :          N, N   ,       (N+1)/2; N   ,       N/2。
38.        ,             (B)
A.ABCDEF      
B.DBEAFC
C.ABDECF      
D.DEBFCA
39.            dabec,      debac,         (cedba) 
40.                    ABDEGCFH DBGEACHF,           (DGEBHFCA)
41.               abdgcefh,         dgbaechf,              (gdbehfca)
42.      (         ) 
43.     p q, q p            (    )
44. N               (N-1)
45.N              (N)
46.    n          ,               (N)
47.            (    ) 
48.         n,       ,            (n(n-1)/2) 
49.                  ,          (    )
50.       ,                (   ) 
51.        (     )
52.       (     )
53.           ,         (    ) 
54.      A             ,     ,   (      )
55.            、   、               。
1.               :             ,         。
1.                        。
2.                                          。
3.                           ,    、  、  、     ,            。
4.                     。
5.               ,            。
6.                       。
7.              、                   。
8.                           。
9.                     。
10.          、  、         。
11.                                    。
12.          :  、         。
13.            :           。
14.       ,                           ,              。
15.                           。
16.                 ,                           。
17.              :         。         ,       1 。
18.                   ,        ,        。            。
19.        ,        ,          。
20.       25      ,    front=16,   rear=9,          18    。 : rear<front ,    =   -(front-rear);
 rear>front ,    =rear-front。
1.              :           ,              :
  N1->N2->N3->N4->N5->N2         ,       N5            。      p1,p2。    p1     ,p2     。  p2  NULL              。              。 
struct link 
{
        int data;
         link* next;
};
bool IsLoop(link* head)
{
         link* p1=head, *p2 = head;
          if (head ==NULL || head->next ==NULL) 
          {
                    return false;
          }
         do{
             p1= p1->next;
             p2 = p2->next->next;
         } while(p2 && p2->next && p1!=p2);          
          if(p1 == p2)
                    return true;
          else
                    return false;
}
2,                          ,           。          : 1->2->3->4->5        5->4->3->2->1。              ,        ,                   ,               ,                。     : 
struct linka {
          int data;
          linka* next;
};
void reverse(linka*& head)
{
          if(head ==NULL)
               return;
          linka*pre, *cur, *ne;
          pre=head;
          cur=head->next;
          while(cur)
          {
               ne = cur->next;
               cur->next = pre;
               pre = cur;
               cur = ne;
          }
          head->next = NULL;
          head = pre;
}
           。                                。     。           ,                   ,              next   NULL。     head  ,       。        : 
linka* reverse(linka* p,linka*& head)
{
          if(p == NULL || p->next == NULL)
          {
               head=p;
               return p;
          }
          else
          {
               linka* tmp = reverse(p->next,head);
               tmp->next = p;
               return p;
          }
}
3,                           ,                    ?
            O(nlogn)   。          ,           ,     ,                     binary search。 C++      : 
bool findcommon(int a[],int size1,int b[],int size2)
{
          int i;
          for(i=0;i<size1;i++)
          {
               int start=0,end=size2-1,mid;
               while(start<=end)
               {
                    mid=(start+end)/2;
                    if(a[i]==b[mid])
                         return true;
                    else if (a[i]<b[mid])
                         end=mid-1;
                    else
                         start=mid+1;
               }
          }
          return false;
}
        O(n)  。            。           。       ,               ,      。                ,               ,                  ,             ,            。 
bool findcommon2(int a[], int size1, int b[], int size2)
{
          int i=0,j=0;
          while(i<size1 && j<size2)
          {
               if(a[i]==b[j])
                         return true;
               if(a[i]>b[j])
                    j++;
               if(a[i]<b[j])
                    i++;
          }
          return false;
}
4,        :
       A1, A2,... An (     ), A1~An      Ai~Aj,  Ai Aj    
  :
    -2, 11, -4, 13, -5, 2, -5, -3, 12, -9         21。
      ,                        。      ,                   。          O(n^3)。           ,            O(n)       ,      Programming Pearls  。          ,                 ,        O(n^2)。                      :                      。  Sum(i, j) A[i] ... A[j]  ,  Sum(i, j+1) = Sum(i, j) + A[j+1]。       ,             : 
int max_sub(int a[],int size)
{
          int i,j,v,max=a[0];
          for(i=0;i<size;i++)
          {
               v=0;
               for(j=i;j<size;j++)
               {
                    v=v+a[j];//Sum(i, j+1) = Sum(i, j) + A[j+1]
                    if(v>max)
                         max=v;
               }
          }
          return max;
}
             ?           。         : 
int max_sub2(int a[], int size)
{
          int i,max=0,temp_sum=0;
          for(i=0;i<size;i++)
          {
               temp_sum+=a[i];
               if(temp_sum>max)
                    max=temp_sum;
               else if(temp_sum<0)
                    temp_sum=0;
          }
          return max;
}
 
6,                     ,                    ,                    ,            。  :

Here is www.fishksy.com.cn

       :

www.fishksy.com.cn is Here

                 ,       ,             ,           ,    。                      ,        ,           。               。
char* reverse_word(const char* str)
{
           int len = strlen(str);
           char* restr = new char[len+1];
           strcpy(restr,str);
           int i,j;
           for(i=0,j=len-1;i<j;i++,j--)
           {
                char temp=restr[i];
                restr[i]=restr[j];
                restr[j]=temp;
           }
           int k=0;
           while(k<len)
           {
                i=j=k;
                while(restr[j]!=' ' && restr[j]!='' )
                     j++;
                k=j+1;
                j--;
                for(;i<j;i++,j--)
                {
                     char temp=restr[i];
                     restr[i]=restr[j];
                     restr[j]=temp;
                }
           }
           return restr;
}
              ,                         。

   
                char temp=restr[i];
                restr[i]=restr[j];
                restr[j]=temp;
  
                restr[i]^=restr[j];
                      restr[j]^=restr[i];
                restr[i]^=restr[j];
 
7,                 MSN    ,        ,      。      ,       ,          ,         ,          。  :

  :      : "This is fishsky 's Chinese site: http://www.fishsky.com.cn/cn"

  : "fishsky"

  : "nc/nc.moc.fishsky.www//:ptth :etis esenihC s'fishsky si sihT"

                 ,   stack    ,            。                 stack  。                。         ,           。

            ,             。     :
#include <iostream>
#include <cassert>
#include <stack>
using namespace std;
//reverse the string 's1' except the substring 'token'.
const char* reverse(const char* s1, const char* token)
{
             assert(s1 && token);
             stack<char> stack1;
             const char* ptoken = token, *head = s1, *rear = s1;
             while (*head != '')
             {
                          while(*head!= '' && *ptoken == *head)
                          {
                             ptoken++;
                             head++;
                          }
                          if(*ptoken == '')//contain the token
                          {
                             const char* p;
                             for(p=head-1;p>=rear;p--)
                                          stack1.push(*p);
 
                             ptoken = token;
                             rear = head;
                          }
                          else
                          {
                             stack1.push(*rear);
                                   head=++rear;
                             ptoken = token;
                          }
             }
             char * return_v = new char[strlen(s1)+1];
             int i=0;
             while(!stack1.empty())
             {
                          return_v[i++] = stack1.top();
                          stack1.pop();
             }
             return_v[i]='';
             return return_v;
}
int main(int argc, char* argv[])
{cout<<"This is fishsky 's Chinese site: http://www.fishsky.com.cn/cn
";
             cout<<reverse("This is fishsky's Chinese site: http://www. fishsky.com.cn/cn"," fishsky ");
             return 0;
}
 8,               :             ,   0     ,               ,  :

    1,1,1,2,2,2,2,2,7,7,1,5,5,5,0    1,2,7,1,5,0       ,             。           STL vector。
#include <iostream>
#include <vector>
using namespace std;
//remove the duplicated numbers in an intger array, the array was end with 0;
//e.g. 1,1,1,2,2,5,4,4,4,4,1,0 --->1,2,5,4,1,0
void static remove_duplicated(int a[], vector<int>& _st)
{
             _st.push_back(a[0]);
             for(int i=1;_st[_st.size()-1]!=0;i++)
             {
                          if(a[i-1]!=a[i])
                             _st.push_back(a[i]);
             }
}
               ,    STL,           。                。
void static remove_duplicated2(int a[])
{
             if(a[0]==0 || a==NULL)
                          return;
             int insert=1,current=1;
             while(a[current]!=0)
             {
                          if(a[current]!=a[current-1])
                          {
                             a[insert]=a[current];
                             insert++;
                             current++;
                          }
                          else
                             current++;
             }
             a[insert]=0;
}
 
9,                     :                      :
          ,                   1,           。
                ,      。
template<typename T>
static int Depth(BSTreeNode<T>* pbs)
{
             if (pbs==NULL)
                          return 0;
             else
             {
                          int ld = Depth(pbs->left);
                          int rd = Depth(pbs->right);
                          return 1 + (ld >rd ? ld : rd);
             }
}
                    1              :
template<typename T>
static bool isBalance(BSTreeNode<T>* pbs)
{
             if (pbs==NULL) 
                          return true;
             int dis = Depth(pbs->left) - Depth(pbs->right);
             if (dis>1 || dis<-1 )
                          return false;
             else
                          return isBalance(pbs->left) && isBalance(pbs->right);

4.abstract class Something {    private abstract String doSomething ();} 이 단락 코드 가 잘못 되 었 습 니까?답: 땡.abstract methods 는 private 로 수식 할 수 없습니다.abstract methods 는 하위 클래스 implement (실현) 의 구체 적 인 세부 사항 을 어떻게 private 로 abstract method 를 봉쇄 할 수 있 습 니까?(같은 이치 로 abstract method 전에는 final 을 추가 할 수 없습니다).5. 아래 코드 세그먼트 가 어디 에 틀 렸 는 지 보 세 요.public class Something {    void doSomething () {        private String s = "";        int l = s.length();    } } 답: 틀 렸 습 니 다. 부분 변수 앞 에 접근 수정자 (private, public, proctected) 를 놓 을 수 없습니다. final 은 부분 변 수 를 수식 할 수 있 습 니 다. (final 은 abstract 와 strictfp 와 같 습 니 다. 모두 비 접근 수정자 입 니 다. strictfp 는 variable 이 아 닌 class 와 method 만 수식 할 수 있 습 니 다.)   private String name;    public abstract boolean isStupidName (String name) {} 답: 틀 렸 습 니 다. abstract method 는 괄호 없 이 분점 으로 끝내 야 합 니 다.

좋은 웹페이지 즐겨찾기