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

📄 查找.c

📁 有关数据结构的一些例子。用C语言编写的。非常有价值的程序。对初学者有指导借鉴意义。
💻 C
📖 第 1 页 / 共 3 页
字号:
#define K 3
#define NULL 0
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct st
{ int num;
  char name[10];
  int age;
  char sex[4];
  char dep[20];
  int cour[K];
  struct st *lchild,*rchild;
} person;
person a[100];
person a1[100];
person a2[100];
person a3[100];
person a4[100];
person a5[100];
person b1[100];
person b2[100];
person b3[100];
person b4[100];
person b5[100];
person *T;
int Q=0,S1,T1;

void fun1(a)    /*输入学生信息*/
person a[];
{ char b[100],ch;
  int i,j;
  for(i=1;1>0;i++)
  { printf("请输入学生学号:");
      gets(b);  a[i].num=atoi(b);
    printf("请输入学生姓名:");
	  gets(a[i].name);
    printf("请输入学生年龄:");
	  gets(b);  a[i].age=atoi(b);
    printf("请输入学生性别:");
	  gets(a[i].sex);
    printf("请输入学生系别:");
	  gets(a[i].dep);
    printf("请输入数据结构成绩:");
      gets(b);  a[i].cour[0]=atoi(b);
    printf("请输入概率成绩:");
	  gets(b);  a[i].cour[1]=atoi(b);
    printf("请输入外语成绩:");
	 gets(b);  a[i].cour[2]=atoi(b);
    Q++;
    printf("学生信息已输入!\n");
    printf("是否继续输入?(Y/N)");
	 ch=getchar();  getchar();
       if(ch!='y')
          break;
  }
  for(j=0;j<Q+1;j++)
  {
	b1[j]=a[j];
    b2[j]=a[j];
    b3[j]=a[j];
    b4[j]=a[j];
    b5[j]=a[j];
  }
  printf("按4键返回主菜单!\n");
}

void fun2(a)         /*输出学生信息*/
person a[];
{ int i,j;
  printf("学号    姓名    年龄    性别    系别  数据结构  概率    外语\n");
  for(i=1;i<Q+1;i++)
  { printf("%d\t%s\t%d\t%s\t%s\t",a[i].num,a[i].name,a[i].age,a[i].sex,a[i].dep);
    for(j=0;j<K;j++)
      printf("%d\t",a[i].cour[j]);
      printf("\n");
  }
}

void fun3(a)            /*追加学生信息*/
person a[];
{ char c[100],ch;
  printf("追加学生信息开始:\n");
  for(Q=Q+1;1>0;Q++)
  { printf("请输入学生学号:");
	  gets(c);  a[Q].num=atoi(c);
	  b1[Q].num=a[Q].num;
	  b2[Q].num=a[Q].num;
	  b3[Q].num=a[Q].num;
	  b4[Q].num=a[Q].num;
	  b5[Q].num=a[Q].num;
    printf("请输入学生姓名:");
	  gets(a[Q].name);
	  strcpy(b1[Q].name,a[Q].name);
	  strcpy(b2[Q].name,a[Q].name);
	  strcpy(b3[Q].name,a[Q].name);
	  strcpy(b4[Q].name,a[Q].name);
	  strcpy(b5[Q].name,a[Q].name);
    printf("请输入学生年龄:");
	  gets(c);  a[Q].age=atoi(c);
	  b1[Q].age=a[Q].age;
	  b2[Q].age=a[Q].age;
	  b3[Q].age=a[Q].age;
	  b4[Q].age=a[Q].age;
	  b5[Q].age=a[Q].age;
    printf("请输入学生性别:");
	  gets(a[Q].sex);
	  strcpy(b1[Q].sex,a[Q].sex);
	  strcpy(b2[Q].sex,a[Q].sex);
	  strcpy(b3[Q].sex,a[Q].sex);
	  strcpy(b4[Q].sex,a[Q].sex);
	  strcpy(b5[Q].sex,a[Q].sex);
    printf("请输入学生系别:");
	  gets(a[Q].dep);
	  strcpy(b1[Q].dep,a[Q].dep);
	  strcpy(b2[Q].dep,a[Q].dep);
	  strcpy(b3[Q].dep,a[Q].dep);
	  strcpy(b4[Q].dep,a[Q].dep);
	  strcpy(b5[Q].dep,a[Q].dep);
    printf("请输入数据结构成绩:");
	  gets(c);  a[Q].cour[0]=atoi(c);
	  b1[Q].cour[0]=a[Q].cour[0];
	  b2[Q].cour[0]=a[Q].cour[0];
	  b3[Q].cour[0]=a[Q].cour[0];
	  b4[Q].cour[0]=a[Q].cour[0];
	  b5[Q].cour[0]=a[Q].cour[0];
    printf("请输入概率成绩:");
	  gets(c);  a[Q].cour[1]=atoi(c);
	  b1[Q].cour[1]=a[Q].cour[1];
	  b2[Q].cour[1]=a[Q].cour[1];
	  b3[Q].cour[1]=a[Q].cour[1];
	  b4[Q].cour[1]=a[Q].cour[1];
	  b5[Q].cour[1]=a[Q].cour[1];
    printf("请输入外语成绩:");
	  gets(c);  a[Q].cour[2]=atoi(c);
	  b1[Q].cour[2]=a[Q].cour[2];
	  b2[Q].cour[2]=a[Q].cour[2];
	  b3[Q].cour[2]=a[Q].cour[2];
	  b4[Q].cour[2]=a[Q].cour[2];
	  b5[Q].cour[2]=a[Q].cour[2];
    printf("学生信息已追加完毕!\n");
    printf("是否继续追加?(Y/N)");
	 ch=getchar();  getchar();
       if(ch!='y')
          break;
  }
  printf("按4键返回主菜单!\n");
}
void menu3()
{ char ch;
  printf("**************************************\n");
  printf("*      1.直接排序    2.起泡排序      *\n");
  printf("*      3.快速排序    4.直接选择排序  *\n");
  printf("*      5.堆排序      6.归并排序      *\n");
  printf("*      7.返回上一级菜单              *\n");
  printf("=====================================*\n");
  printf("*                    (请从1-7中选择)*\n");
  printf("**************************************\n");
  do
  {  ch=getchar();  getchar();
     switch(ch)
	 { case'1': INSORT1(b1);    break;
	   case'2': BUBSORT1(b1);   break;
	   case'3': QUISORT1(b1,S1,T1);  break;
	   case'4': selsort1(b1);   break;
	   case'5': HEASORT1(b1);   break;
	   case'6': MERGES1(b1);    break;
	   case'7': menu2();       ;
	 }
  } while(1);
}

void menu4()
{ char ch;
  printf("**************************************\n");
  printf("*      1.直接排序    2.起泡排序      *\n");
  printf("*      3.快速排序    4.直接选择排序  *\n");
  printf("*      5.堆排序      6.归并排序      *\n");
  printf("*      7.返回上一级菜单              *\n");
  printf("=====================================*\n");
  printf("*                    (请从1-7中选择)*\n");
  printf("**************************************\n");
  do
  {  ch=getchar();  getchar();
     switch(ch)
	 { case'1': INSORT2(b2);    break;
	   case'2': BUBSORT2(b2);   break;
	   case'3': QUISORT2(b2,S1,T1);  break;
	   case'4': selsort2(b2);   break;
	   case'5': HEASORT2(b2);   break;
	   case'6': MERGES2(b2);    break;
	   case'7': menu2();        break;
	 }
  } while(1);
}

void menu5()
{ char ch;
  printf("**************************************\n");
  printf("*      1.直接排序    2.起泡排序      *\n");
  printf("*      3.快速排序    4.直接选择排序  *\n");
  printf("*      5.堆排序      6.归并排序      *\n");
  printf("*      7.返回上一级菜单              *\n");
  printf("=====================================*\n");
  printf("*                    (请从1-7中选择)*\n");
  printf("**************************************\n");
  do
  {  ch=getchar();  getchar();
     switch(ch)
	 { case'1': INSORT3(b3);    break;
	   case'2': BUBSORT3(b3);   break;
	   case'3': QUISORT3(b3,S1,T1);  break;
	   case'4': selsort3(b3);   break;
	   case'5': HEASORT3(b3);   break;
	   case'6': MERGES3(b3);    break;
	   case'7': menu2();        break;
	 }
  } while(1);
}

void menu6()
{ char ch;
  printf("**************************************\n");
  printf("*      1.直接排序    2.起泡排序      *\n");
  printf("*      3.快速排序    4.直接选择排序  *\n");
  printf("*      5.堆排序      6.归并排序      *\n");
  printf("*      7.返回上一级菜单              *\n");
  printf("=====================================*\n");
  printf("*                    (请从1-7中选择)*\n");
  printf("**************************************\n");
  do
  {  ch=getchar();  getchar();
     switch(ch)
	 { case'1': INSORT4(b4);    break;
	   case'2': BUBSORT4(b4);   break;
	   case'3': QUISORT4(b4,S1,T1);  break;
	   case'4': selsort4(b4);   break;
	   case'5': HEASORT4(b4);   break;
	   case'6': MERGES4(b4);    break;
	   case'7': menu2();        break;
	 }
  } while(1);
}

void menu7()
{ char ch;
  printf("**************************************\n");
  printf("*      1.直接排序    2.起泡排序      *\n");
  printf("*      3.快速排序    4.直接选择排序  *\n");
  printf("*      5.堆排序      6.归并排序      *\n");
  printf("*      7.返回上一级菜单              *\n");
  printf("=====================================*\n");
  printf("*                    (请从1-7中选择)*\n");
  printf("**************************************\n");
  do
  {  ch=getchar();  getchar();
     switch(ch)
	 { case'1': INSORT5(b5);    break;
	   case'2': BUBSORT5(b5);   break;
	   case'3': QUISORT5(b5,S1,T1);  break;
	   case'4': selsort5(b5);   break;
	   case'5': HEASORT5(b5);   break;
	   case'6': MERGES5(b5);    break;
	   case'7': menu2();        break;
	 }
  } while(1);
}

void menu1()
{ char ch;
  printf("****************************************\n");
  printf("*            学生成绩管理              *\n");
  printf("*======================================*\n");
  printf("*   1. 输入学生信息    2.输出学生信息  *\n");
  printf("*   3.   排序          4.返回主菜单    *\n");
  printf("*   5.追加学生信息     6.查找          *\n");
  printf("*   0.退出本系统                       *\n");
  printf("*======================================*\n");
  printf("*                      (请从0-6中选择)*\n");
  printf("****************************************\n");
  do
  { ch=getchar();   getchar();
    switch(ch)
	{ case'1': fun1(a);  break;
	  case'2': fun2(a);  break;
	  case'3': menu2();  break;
	  case'4': menu1();  break;
	  case'5': fun3(a);  break;
	  case'6': menu8();  break;
	  case'0': exit(0);
    }
  } while(1);
}

menu2()
{ char ch;
  printf("**************************************\n");
  printf("*             排序菜单               *\n");
  printf("*====================================*\n");
  printf("*         1.对学号进行排序           *\n");
  printf("*         2.对年龄进行排序           *\n");
  printf("*         3.对数据结构进行排序       *\n");
  printf("*         4.对概率进行排序           *\n");
  printf("*         5.对外语进行排序           *\n");
  printf("*         6.返回排序菜单             *\n");
  printf("*         7.返回主菜单               *\n");
  printf("*====================================*\n");
  printf("*                   (请从1-6中选择) *\n");
  printf("**************************************\n");
  do
  {   ch=getchar();   getchar();
	  switch(ch)
	  { case'1': menu3();   break;
	    case'2': menu4();   break;
	    case'3': menu5();   break;
	    case'4': menu6();   break;
	    case'5': menu7();   break;
	    case'6': menu2();   break;
	    case'7': menu1();   break;
	  }
  } while(1);
}

void menu9()
{ char ch;
  printf("**************************************\n");
  printf("*         1.顺序查找                 *\n");
  printf("*         2.二分查找                 *\n");
  printf("*         3.二叉排序树               *\n");
  printf("*         4.返回上一级菜单           *\n");
  printf("*====================================*\n");
  printf("*                    (请在1-4中选择)*\n");
  printf("**************************************\n");
  do
  { ch=getchar();   getchar();
    switch(ch)
	{ case'1': SEQSEAR1(b1);  break;
	  case'2': BINSEAR1(b1);  break;
	  case'3': BSTSEAR1(b1);  break;
	  case'4': menu8();       break;
	}
  } while(1);
}

void menu10()
{ char ch;
  printf("**************************************\n");
  printf("*         1.顺序查找                 *\n");
  printf("*         2.二分查找                 *\n");
  printf("*         3.二叉排序树               *\n");
  printf("*         4.返回上一级菜单           *\n");
  printf("*====================================*\n");
  printf("*                    (请在1-4中选择)*\n");
  printf("**************************************\n");
  do
  { ch=getchar();   getchar();
    switch(ch)
	{ case'1': SEQSEAR2(b1);  break;
	  case'2': BINSEAR2(b1);  break;
	  case'3': BSTSEAR2(b1);  break;
	  case'4': menu8();       break;
	}
  } while(1);
}

void menu11()
{ char ch;
  printf("**************************************\n");
  printf("*         1.顺序查找                 *\n");
  printf("*         2.二分查找                 *\n");
  printf("*         3.二叉排序树               *\n");
  printf("*         4.返回上一级菜单           *\n");
  printf("*====================================*\n");
  printf("*                    (请在1-4中选择)*\n");
  printf("**************************************\n");
  do
  { ch=getchar();   getchar();
    switch(ch)
	{ case'1': SEQSEAR3(b1);  break;
	  case'2': BINSEAR3(b1);  break;
	  case'3': BSTSEAR3(b1);  break;
	  case'4': menu8();       break;
	}
  } while(1);
}

menu8()
{ char ch;
  printf("**************************************\n");
  printf("*	      查找菜单               *\n");
  printf("*====================================*\n");
  printf("*         1.对学号进行查找           *\n");
  printf("*         2.对姓名进行查找           *\n");
  printf("*         3.对年龄进行查找           *\n");
  printf("          4.返回主菜单               *\n");
  printf("*====================================*\n");
  printf("*                   (请从1-4中选择) *\n");
  printf("**************************************\n");
  do
  {   ch=getchar();   getchar();
	  switch(ch)
	  { case'1': menu9();   break;
	    case'2': menu10();  break;
	    case'3': menu11();  break;
	    case'4': menu1();   break;
	  }
  } while(1);
}

INSORT1(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];
   }
  printf("对学号进行直接排序的结果为:\n");
  fun2(b1);
}

BUBSORT1(b1)           /*对学号进行起泡排序*/
person b1[];
{ int i,j,noswap;
  person temp;
  for(i=1;i<Q;i++)
   { noswap=1;
     for(j=Q-1;j>=i;j--)
       if(b1[j+1].num<b1[j].num)
	 { temp=b1[j+1];
	   b1[j+1]=b1[j];
	   b1[j]=temp;
	   noswap=0;
	 }
     if(noswap)
       break;
   }
  printf("对学号进行起泡排序的结果为:\n");
  fun2(b1);
}

int PARTION1(b1,l,h)   /*对学号进行快速排序*/
person b1[];
int l,h;
{ int i,j;
  person temp;
  i=l;  j=h;  temp=b1[i];
  do
   { while((b1[j].num>=temp.num) && (i<j))
       j--;
       if(i<j)
	 b1[i++]=b1[j];
     while((b1[i].num<=temp.num) && (i<j))
       i++;
       if(i<j)
	 b1[j--]=b1[i];
   } while(i!=j);
  b1[i]=temp;
  return(i);
}

QUISORT1(b1,s1,t1)
person b1[];
int s1,t1;
{ int i,j;
  if(s1<t1)
   { i=PARTION1(b1,s1,t1);
     QUISORT1(b1,s1,i-1);
     QUISORT1(b1,i+1,t1);
   }
  printf("对学号进行快速排序的结果为:\n");
  fun2(b1);
}

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

SIFT1(b1,i,m)            /*对学号进行堆排序*/
person b1[];
int i,m;
{ int j;
  person temp;
  temp=b1[i];
  j=2*i;
  while(j<=m)
  { if((j<m) && (b1[j].num<b1[j+1].num))
       j++;
    if(temp.num<b1[j].num)
	{ b1[i]=b1[j];
	  i=j;  j=2*i;
	}
	else
		break;
  }
  b1[i]=temp;
}

HEASORT1(b1)
person b1[];
{ int i,j;
  person temp;
  for(i=Q/2;i>=1;i--)
	  SIFT1(b1,i,Q);
  for(i=Q;i>=1;i--)
  { temp=b1[1];
    b1[1]=b1[i];
	b1[i]=temp;
    SIFT1(b1,1,i-1);
  }
  printf("对学号进行堆排序的结果为:\n");
  fun2(b1);
}

MERGE1(b1,a1,low,mid,high)                  /*对学号进行归并排序*/
person b1[];
person a1[];
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(b1[i].num<=b1[j].num)
		  a1[k++]=b1[i++];
	  else
		  a1[k++]=b1[j++];
	  while(i<=Q)
		  a1[k++]=b1[i++];
	  while(j<=Q)
		  a1[k++]=b1[j++];
}

MERGEP1(b1,a1,length)
person b1[];
person a1[];
int length;
{ int i,j;
  i=0;
  while(i+2*length-1<Q+1)
  {  MERGE1(b1,a1,i,i+length-1,i+2*length-1);
     i=i+2*length;
  }
  if(i+length-1<Q)
	  MERGE1(b1,a1,i,i+length-1,Q);
  else
	  for(j=i;j<Q+1;j++)
		  a1[j]=b1[j];
}

MERGES1(b1)
person b1[];
{ int length;
  length=1;
  while(length<Q+1)
  { MERGEP1(b1,a1,length);
    length=2*length;

⌨️ 快捷键说明

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