마이크로소프트 의 일부 데이터 구조의 면접 문제.

4653 단어
마이크로소프트 의 일부 데이터 구조의 면접 문제.
 1. 이 진 트 리 우선 검색
typedef struct btree
{
int data;
btree *L;
btree *R;
}btree;
void BST(btree *Tree)
{
queue q;
        btree *p=Tree;
q.push(p);
while(!q.empty())
{
p=q.front();
q.pop();
printf("%d",p->data);
if(p->L)
q.push(p->L);
if(p->R)
q.push(p->R);
}
}
2. 문자열 의 모든 배열 을 출력 합 니 다. (문자열 에 중복 문자 가 있 을 수 있 습 니 다)
void   search(char   s[],   int   i,   int   n)
{   
int   j;   
char   temp; 
for(j=0;j{   
if(j!=0 &&s[j]==s[j-1])
;   
        else if(s[j]!='@')
{   
                       p[i]=s[j];   
                       s[j]='@';   
  if(i==n-1)
  {   
p[n]='\0';   
printf("%s",   p);   
}
  else
{   
search(s,i+1,n);   
}   
         s[j]=p[i];   
       }   
     }   
  }  
3. 링크 에 고리 가 있 는 지 판단
typedef struct node
{
int data;
node *next;
}node;
bool IsLoop(node *head)
{
node *p=head;
node *q=head->next;
node *tmp;
if(q->next==p)
return true;
while(p!=NULL&&q!=NULL&&p!=q)
{
p=p->next;
tmp=q->next;
q=tmp->next;
}
if(p==NULL||q==NULL)
return false;
else
return true;
}
4. 0 - n 의 배열 의 요소 크기 는 0 - n 으로 중복 여 부 를 판단 합 니 다.

       
       
       
       
bool IfDuplicate( int * a, int n) { for ( int i = 0 ;i < n;i ++ ) { while (a[i] != i && a[i] !=- 1 ) { if (a[a[i]] ==- 1 ) return true ; int j = a[i]; a[i] = a[a[i]]; a[j] =- 1 ; } if (a[i] == i) a[i] =- 1 ; } return false ; }

좋은 웹페이지 즐겨찾기