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) 编辑 收藏 引用