{
parent = NULL; }
else if(a == t ->data.key2) {
dest = t; return; } else {
parent = t;
if(a < t->data.key2) {
searParent2(t->lchild, a); } else {
searParent2(t->rchild, a); } } }
//在以关键字为学分绩的BST中查找学分绩为a的记录并删除 若该记录不存在 则不做任何操作
BST dele2(BST t, keytype a) {
node * tmp; node * tmp2;
searParent2(t, a); if(t == NULL) {
printf(\找不到要删除的记录!\\n\ return t; }
else if( t ->lchild == NULL && t->rchild == NULL) {
free(t);
return NULL; }
else if(parent == NULL) {
printf(\找不到要删除的记录!\\n\ return t; }
else {
if(dest->lchild == NULL && dest ->rchild == NULL) {
tmp = dest;
if(parent ->lchild == dest) {
parent ->lchild =NULL; } else {
parent ->rchild = NULL; }
free(tmp); }
else if(dest ->lchild == NULL) {
tmp = dest; if(dest != t) {
if(parent ->lchild == dest) {
parent ->lchild = dest ->rchild; } else {
parent ->rchild = dest ->rchild; } } else {
t = t ->rchild; }
free(tmp); }
else if(dest -> rchild == NULL) {
tmp = dest; if(dest != t) {
if(parent ->lchild == dest) {
parent ->lchild = dest ->lchild; }
else {
t = dest ->lchild; } } else {
t = t ->lchild; }
free(tmp); } else {
tmp2 = dest; parent = dest;
tmp2 = tmp2 -> rchild;
while(tmp2 -> lchild != NULL) {
parent = tmp2;
tmp2 = tmp2 -> lchild; }
dest -> data = tmp2 ->data; if(parent == dest) {
parent ->rchild = tmp2 ->rchild; } else {
parent -> lchild = tmp2-> rchild; }
free(tmp2); }
return t; } }
//打开\为文件中的记录分别按照英语成绩与学分绩排序并将结果输出到屏幕与\中 void file_sort() {
BST t, t2; t = NULL; t2 = NULL;
FILE * fp; record a;
if((fp = fopen(\ {
printf(\打开文件失败!\\n\ exit(0); }
fscanf(fp, \
fscanf(fp, \ a.GPA = (a.EN*1.5 + a.CS * 3.5 + a.MATHS * 5)/10; while(a.key!= -1) {
t = inser(t,a); t2 = inser2(t2, a); fscanf(fp, \
fscanf(fp ,\ a.GPA = (a.EN*1.5 + a.CS * 3.5 + a.MATHS * 5)/10; }
printf(\英语成绩排名为:\\n\ sort_output(t);
printf(\学分绩排名为:\\n\ sort_output(t2);
freopen(\ printf(\英语成绩排名为:\\n\ sort_output(t);
printf(\学分绩排名为:\\n\ sort_output(t2); fclose(fp); }