⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 查找.c

📁 有关数据结构的一些例子。用C语言编写的。非常有价值的程序。对初学者有指导借鉴意义。
💻 C
📖 第 1 页 / 共 3 页
字号:
  return(i);
}

QUISORT5(b5,s1,t1)
person b5[];
int s1,t1;
{ int i,j;
  if(s1<t1)
   { i=PARTION5(b5,s1,t1);
     QUISORT5(b5,s1,i-1);
     QUISORT5(b5,i+1,t1);
   }
  printf("对外语进行快速排序的结果为:\n");
  fun2(b5);
}

selsort5(b5)                /*对外语进行直接选择排序*/
person b5[];
{ int i,j,k;
  person temp;
  for(i=1;i<Q-1;i++)
  { k=i;
    for(j=i+1;j<Q;j++)
	  if(b5[j].cour[2]<b5[k].cour[2])
		  k=j;
	  if(k!=i)
	  { temp=b5[i];
	    b5[i]=b5[k];
		b5[k]=temp;
      }
  }
  printf("对外语进行直接选择排序的结果为:\n");
  fun2(b5);
}

SIFT5(b5,i,m)            /*对外语进行堆排序*/
person b5[];
int i,m;
{ int j;
  person temp;
  temp=b5[i];
  j=2*i;
  while(j<=m)
  { if((j<m) && (b5[j].cour[2]<b5[j+1].cour[2]))
       j++;
    if(temp.cour[2]<b5[j].cour[2])
	{ b5[i].cour[2]=b5[j].cour[2];
	  i=j;  j=2*i;
	}
	else
		break;
  }
  b5[i]=temp;
}

HEASORT5(b5)
person b5[];
{ int i,j;
  person temp;
  for(i=Q/2;i>=1;i--)
	  SIFT5(b5,i,Q);
  for(i=Q;i>=1;i--)
  { temp=b5[1];
    b5[1]=b5[i];
	b5[i]=temp;
    SIFT5(b5,1,i-1);
  }
  printf("对外语进行堆排序的结果为:\n");
  fun2(b5);
}

MERGE5(b5,a5,low,mid,high)                  /*对外语进行归并排序*/
person b5[];
person a5[];
int low,mid,high;
{ int i,j,k;
  low=1;  mid=Q/2+1;  high=Q;
  i=low;  j=mid;  k=low;
  while((i<=Q/2) && (j<=high))
	  if(b5[i].cour[2]<=b5[j].cour[2])
		  a5[k++]=b5[i++];
	  else
		  a5[k++]=b5[j++];
	  while(i<=Q)
		  a5[k++]=b5[i++];
	  while(j<=Q)
		  a5[k++]=b5[j++];
}

MERGEP5(b5,a5,length)
person b5[];
person a5[];
int length;
{ int i,j;
  i=0;
  while(i+2*length-1<Q+1)
  {  MERGE5(b5,a5,i,i+length-1,i+2*length-1);
     i=i+2*length;
  }
  if(i+length-1<Q)
	  MERGE5(b5,a5,i,i+length-1,Q);
  else
	  for(j=i;j<Q+1;j++)
		  a5[j]=b5[j];
}

MERGES5(b5)
person b5[];
{ int length;
  length=1;
  while(length<Q+1)
  { MERGEP5(b5,a5,length);
    length=2*length;
	MERGEP5(a5,b5,length);
	length=2*length;
  }
 printf("对外语进行归并排序的结果为:\n");
 fun2(a5);
}

SEQSEAR1(b1,temp)         /*对学生学号进行顺序查找*/
person b1[];
person temp;
{ int i,j;
  char ch;
  do
  { printf("请输入要查找的学生学号:\n");
    scanf("%d",&temp.num);
	i=1;
	while(temp.num!=b1[i].num)
	 {	i++;
		if(i==Q+1)
		 { printf("查找失败!\n");
		   break;
		 }
	 }
	if(temp.num==b1[i].num)
	{ printf("该学生的信息为:\n");
	  printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
      printf("%d\t%s\t%d\t%s\t%s\t",b1[i].num,b1[i].name,b1[i].age,b1[i].sex,b1[i].dep);
      for(j=0;j<K;j++)
        printf("%d\t",b1[i].cour[j]);
	}
	printf("\n是否继续查找?\n");
	getchar();  ch=getchar();
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
	ch=getchar();
}


INNAME1(b1)             /*对学生学号进行二分查找*/
person b1[];
{ int i,j;
  for(i=2;i<Q+1;i++)
  { b1[0]=b1[i];
    j=i-1;
	while(b1[0].num<b1[j].num)
		b1[j+1]=b1[j--];
	    b1[j+1]=b1[0];
  }
}

BINSEAR1(b1,temp)
person b1[];
person temp;
{ char ch;
  int j,low,mid,high;
  INNAME1(b1);
  do
  { low=1;  high=Q;
	printf("请输入要查找的学生学号:\n");
	  scanf("%d",&temp.num);
    while(low<=high)
	{ mid=(low+high)/2;
	  if(temp.num==b1[mid].num)
	  { printf("该学生的信息为:\n");
	    printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
        printf("%d\t%s\t%d\t%s\t%s\t",b1[mid].num,b1[mid].name,b1[mid].age,b1[mid].sex,b1[mid].dep);
        for(j=0;j<K;j++)
		  printf("%d\t",b1[mid].cour[j]);
		break;
	  }
	  if(temp.num<b1[mid].num)
		  high=mid-1;
	  else
		  low=mid+1;
	}
	if(low>high)
	{ printf("查找失败!\n");
	  printf("是否继续查找?\n");
	  getchar();  ch=getchar();
	}
	else
	{ printf("\n是否继续查找?\n");
	  getchar();  ch=getchar();
	}
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
  ch=getchar();
}

person *INSEAR1(t,s)           /*对学生学号进行二叉排序树查找*/
person *t;
person *s;
{ person *f;
  person *p;
  p->num=t->num;
  while(p->num!=NULL)
  { f->num=p->num;
    if(s->num==p->num)
		printf("无须插入!\n");
	    return(t);
	if(s->num<p->num)
		p=p->lchild;
	else
		p=p->rchild;
  }
  if(t->num==NULL)
	  return(s);
  if(s->num<f->num)
	 f->lchild=s;
  else
	  f->rchild=s;
  return(t);
}
 
CREAT1(t)
person *t;
{ int i;
  person b1[100];
  person s[100];
  t=NULL;
  for(i=1;i<Q+1;i++)
  { s[i].num=b1[i].num;
    t=INSEAR1(t,s[i]);
  }
}

BSTSEAR1(b1)
person b1[];
{ int i=1,j=0;
  char ch;
  person *temp;
  CREAT1(T);
  do
  { printf("请输入要查找的学生学号:\n");
    scanf("%d",&temp->num);
    while(T!=NULL)
	{ if(T->num==temp->num)
	{   printf("该学生的信息为:\n");
	    printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
        printf("%d\t%s\t%d\t%s\t%s\t",b1[i].num,b1[i].name,b1[i].age,b1[i].sex,b1[i].dep);
        for(j=0;j<K;j++)
          printf("%d\t",b1[i].cour[j]);
        break; 
	}
      if(T->num>temp->num)
         T=T->lchild;
      else
	     T=T->rchild;
	}
    printf("查找失败!\n");
    printf("是否继续查找?\n");
    getchar();  ch=getchar();
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
  ch=getchar();
}

SEQSEAR2(b2,temp)         /*对学生姓名进行顺序查找*/
person b2[];
person *temp;
{ int i,j;
  char ch;
  do
  { printf("请输入要查找的学生姓名:\n");
    gets(temp->name);
	i=1;
	while(strcmp(b2[i].name,temp->name)!=0)
	{	i++;
	    if(i==Q+1)
		{ printf("查找失败!\n");
		  break;
		}
	}
	if(strcmp(b2[i].name,temp->name)==0)
	{ printf("该学生的信息为:\n");
	  printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
      printf("%d\t%s\t%d\t%s\t%s\t",b2[i].num,b2[i].name,b2[i].age,b2[i].sex,b2[i].dep);
      for(j=0;j<K;j++)
        printf("%d\t",b2[i].cour[j]);
	}
	printf("\n是否继续查找?\n");
	ch=getchar();  getchar();
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
}


INNAME2(b2)             /*对学生姓名进行二分查找*/
person b2[];
{ int i,j;
  for(i=2;i<Q+1;i++)
  { b2[0]=b2[i];
    j=i-1;
	while(strcmp(b2[0].name,b2[j].name)<0)
		b2[j+1]=b2[j--];
	    b2[j+1]=b2[0];
  }
}

BINSEAR2(b2,temp)
person b2[];
person *temp;
{ char ch;
  int j,low,mid,high;
  INNAME2(b2);
  do
  { low=1;  high=Q;
	printf("请输入要查找的学生姓名:\n");
	  gets(temp->name);
    while(low<=high)
	{ mid=(low+high)/2;
	  if(strcmp(temp->name,b2[mid].name)==0)
	  { printf("该学生的信息为:\n");
	    printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
        printf("%d\t%s\t%d\t%s\t%s\t",b2[mid].num,b2[mid].name,b2[mid].age,b2[mid].sex,b2[mid].dep);
        for(j=0;j<K;j++)
		  printf("%d\t",b2[mid].cour[j]);
		break;
	  }
	  if(strcmp(temp->name,b2[mid].name)<0)
		  high=mid-1;
	  else
		  low=mid+1;
	}
	if(low>high)
	{ printf("查找失败!\n");
	  printf("是否继续查找?\n");
	  ch=getchar();  getchar();
	}
	else
	{ printf("\n是否继续查找?\n");
	  ch=getchar();  getchar();
	}
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
}

person *INSEAR2(t,s)           /*对学生姓名进行二叉排序树查找*/
person *t;
person *s;
{ person *f;
  person *p;
  strcpy(p->name,t->name);
  while(strlen(p->name)!=NULL)
  { strcpy(f->name,p->name);
    if(strcmp(s->name,p->name)==0)
		printf("无须插入!\n");
	    return(t);
	if(strcmp(s->name,p->name)<0)
		p=p->lchild;
	else
		p=p->rchild;
  }
  if(strlen(t->name)==NULL)
	  return(s);
  if(strcmp(s->name,f->name)<0)
	 f->lchild=s;
  else
	  f->rchild=s;
  return(t);
}

CREAT2(t)
person *t;
{ int i;
  person b2[100];
  person s[100];
  t=NULL;
  for(i=1;i<Q+1;i++)
  { strcpy(s[i].name,b2[i].name);
    t=INSEAR2(t,s[i]);
  }
}

BSTSEAR2(b2)
person b2[];
{ int i=1,j=0;
  char ch;
  person *temp;
  CREAT2(T);
  do
  { printf("请输入要查找的学生姓名:\n");
    gets(temp->name);
    while(T!=NULL)
	{ if(strcmp(T->name,temp->name)==0)
	{   printf("该学生的信息为:\n");
	    printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
        printf("%d\t%s\t%d\t%s\t%s\t",b2[i].num,b2[i].name,b2[i].age,b2[i].sex,b2[i].dep);
        for(j=0;j<K;j++)
          printf("%d\t",b2[i].cour[j]);
        break; 
	}
      if(strcmp(T->name,temp->name)>0)
         T=T->lchild;
      else
	     T=T->rchild;
	}
    printf("查找失败!\n");
    printf("是否继续查找?\n");
    ch=getchar();  getchar();
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
}


SEQSEAR3(b3,temp)         /*对学生年龄进行顺序查找*/
person b3[];
person *temp;
{ int i,j;
  char ch;
  do
  { printf("请输入要查找的学生年龄:\n");
    scanf("%d",&temp->age);
	i=1;
	while(temp->age!=b3[i].age)
	{	i++;
	    if(i==Q+1)
		{ printf("查找失败!\n");
		  break;
		}
	}
	if(temp->age==b3[i].age)
	{ printf("该学生的信息为:\n");
	  printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
      printf("%d\t%s\t%d\t%s\t%s\t",b3[i].num,b3[i].name,b3[i].age,b3[i].sex,b3[i].dep);
      for(j=0;j<K;j++)
        printf("%d\t",b3[i].cour[j]);
	}
	printf("\n是否继续查找?\n");
	getchar();  ch=getchar();
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
  ch=getchar();
}


INNAME3(b3)             /*对学生年龄进行二分查找*/
person b3[];
{ int i,j;
  for(i=2;i<Q+1;i++)
  { b3[0]=b3[i];
    j=i-1;
	while(b3[0].age<b3[j].age)
		b3[j+1]=b3[j--];
	    b3[j+1]=b3[0];
  }
}

BINSEAR3(b3,temp)
person b3[];
person *temp;
{ char ch;
  int j,low,mid,high;
  INNAME3(b3);
  do
  { low=1;  high=Q;
	printf("请输入要查找的学生年龄:\n");
	  scanf("%d",&temp->age);
    while(low<=high)
	{ mid=(low+high)/2;
	  if(temp->age==b1[mid].age)
	  { printf("该学生的信息为:\n");
	    printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
        printf("%d\t%s\t%d\t%s\t%s\t",b3[mid].num,b3[mid].name,b3[mid].age,b3[mid].sex,b3[mid].dep);
        for(j=0;j<K;j++)
		  printf("%d\t",b3[mid].cour[j]);
		break;
	  }
	  if(temp->age<b3[mid].age)
		  high=mid-1;
	  else
		  low=mid+1;
	}
	if(low>high)
	{ printf("查找失败!\n");
	  printf("是否继续查找?\n");
	  getchar();  ch=getchar();
	}
	else
	{ printf("\n是否继续查找?\n");
	  getchar();  ch=getchar();
	}
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
  ch=getchar();
}

person *INSEAR3(t,s)           /*对学生年龄进行二叉排序树查找*/
person *t;
person *s;
{ person *f;
  person *p;
  p->age=t->age;
  while(p->age!=NULL)
  { f->age=p->age;
    if(s->age==p->age)
		printf("无须插入!\n");
	    return(t);
	if(s->age<p->age)
		p=p->lchild;
	else
		p=p->rchild;
  }
  if(t->age==NULL)
	  return(s);
  if(s->age<f->age)
	 f->lchild=s;
  else
	  f->rchild=s;
  return(t);
}
 
CREAT3(t)
person *t;
{ int i;
  person b3[100];
  person s[100];
  t=NULL;
  for(i=1;i<Q+1;i++)
  { s[i].age=b1[i].age;
    t=INSEAR1(t,s[i]);
  }
}

BSTSEAR3(b3)
person b3[];
{ int i=1,j=0;
  char ch;
  person *temp;
  CREAT3(T);
  do
  { printf("请输入要查找的学生学号:\n");
    scanf("%d",&temp->age);
    while(T!=NULL)
	{ if(T->age==temp->age)
	{   printf("该学生的信息为:\n");
	    printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
        printf("%d\t%s\t%d\t%s\t%s\t",b3[i].num,b3[i].name,b3[i].age,b3[i].sex,b3[i].dep);
        for(j=0;j<K;j++)
          printf("%d\t",b3[i].cour[j]);
        break; 
	}
      if(T->age>temp->age)
         T=T->lchild;
      else
	     T=T->rchild;
	}
    printf("查找失败!\n");
    printf("是否继续查找?\n");
    getchar();  ch=getchar();
  } while(ch=='y');
  printf("按4键返回上一级菜单!\n");
  ch=getchar();
}

main()
{
  menu1();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -