ccyy's coding zone
往前走,不要留恋路边的风景.
posts - 25,comments - 9,trackbacks - 0
 1、广度优先搜索二叉树
typedef struct btree
{
int data;
btree *L;
btree *R;
}btree;
void BST(btree *Tree)
{
queue<btree*> 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<n;++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\n",   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; }
posted on 2010-07-28 16:49 ccyy 阅读(438) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 微软的一些数据结构的面试题(临时抱佛脚做的 )
2010-07-29 16:43 | roy
bool IsLoop(node *head)
{
...
while(p!=NULL&&q!=NULL&&p!=q)
{
p=p->next;
tmp=q->next;
q=tmp->next; // core dump here! if tmp == NULL
}
...
}  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理