桂电数据结构实验报告六

**

二叉检索树

**
源代码的调试

#define MAXSIZE 100
#define NULL 0
#include<stdio.h>
#include<stdlib.h>
typedef int keytype;
typedef int elemtype;
typedef struct node {
	keytype key;   /*关键字域*/
	elemtype other;/*其他数据域*/
	struct node *lchild,*rchild;   /*左、右孩子指针*/
} bilist;             /*二叉检索树的结点结构*/

void  insert(bilist **r,bilist *s) { /* 将*s结点插入到一棵二叉检索树*r中*/
	bilist *q,*p;
	if((*r)==NULL)  (*r)=s;
	else if(s->key<(*r)->key)  insert(&((*r)->lchild),s);
	else insert(&((*r)->rchild),s);
}

bilist *creat(keytype r[],int n) { /*二叉检索树的构造函数算法*/
	int i;
	bilist *s,*t;
	t=NULL;
	for(i=0; i<n; i++) {
		s=(bilist *)malloc(sizeof(bilist));
		s->key=r[i];
		s->other=NULL;
		s->rchild=NULL;
		s->lchild=NULL;
		insert(&t,s);
	}
	return t;
}

bilist  *search(bilist *t,keytype k) { /*二叉检索树检索算法*/
	if((t==NULL)||(t->key==k))  return t;
	else if(t->key<k)
		return (search(t->rchild,k));
	else
		return(search(t->lchild,k));
}

main() {
	keytype A[MAXSIZE];
	int i,data,n=10;
	bilist *root;
	for(i=0; i<n; i++)
		scanf("%d",&A[i]);
	printf("\n");
	root=creat(A,n);
	printf("please input the search key:");
	scanf("%d",&data);
	if(search(root,data)!=NULL) printf("search succeed! \n");
	else printf("search failed!\n ");
}

(1) 把二叉排序树的插入函数的递归算法改写为非递归算法,并在主函数中调用它,调试好程序并分析其运行结果。

#define MAXSIZE 100
#define NULL 0
#include<stdio.h>
#include<stdlib.h>
typedef int keytype;
typedef int elemtype;
typedef struct node {
	keytype key;   /*关键字域*/
	elemtype other;/*其他数据域*/
	struct node *lchild,*rchild;   /*左、右孩子指针*/
} bilist;             /*二叉检索树的结点结构*/

bilist *INSERTBST(bilist *t,bilist *s){
	bilist *f,*p;
	p = t;
	while(p!=NULL){
		f = p;
		if(s->key == p->key) return t;
		if(s->key < p->key) p = p->lchild;
		else p = p->rchild;
	}
	if(t==NULL) return s;
	if(s->key < f->key) f->lchild = s;
	else f->rchild = s;
	return t;
}

bilist *creat(keytype r[],int n) { /*二叉检索树的构造函数算法*/
	int i;
	bilist *s,*t;
	t=NULL;
	for(i=0; i<n; i++) {
		s=(bilist *)malloc(sizeof(bilist));
		s->key=r[i];
		s->other=NULL;
		s->rchild=NULL;
		s->lchild=NULL;
		t = INSERTBST(t,s);
	}
	return t;
}

bilist  *search(bilist *t,keytype k) { /*二叉检索树检索算法*/
	if((t==NULL)||(t->key==k))  return t;
	else if(t->key<k)
		return (search(t->rchild,k));
	else
		return(search(t->lchild,k));
}

main() {
	keytype A[MAXSIZE];
	int i,data,n=10;
	bilist *root;
	for(i=0; i<n; i++)
		scanf("%d",&A[i]);
	printf("\n");
	root=creat(A,n);
	printf("please input the search key:");
	scanf("%d",&data);
	if(search(root,data)!=NULL) printf("search succeed! \n");
	else printf("search failed!\n ");
}

(2) 把二叉排序树的插入函数的递归算法改写为非递归算法,并在主函数中调用它,调试好程序并分析其运行结果。

#define MAXSIZE 100
#define NULL 0
#include<stdio.h>
#include<stdlib.h>
typedef int keytype;
typedef int elemtype;
typedef struct node {
	keytype key;   /*关键字域*/
	elemtype other;/*其他数据域*/
	struct node *lchild,*rchild;   /*左、右孩子指针*/
} bilist;             /*二叉检索树的结点结构*/

bilist *INSERTBST(bilist *t,bilist *s) {
	bilist *f,*p;
	p = t;
	while(p!=NULL) {
		f = p;
		if(s->key == p->key) return t;
		if(s->key < p->key) p = p->lchild;
		else p = p->rchild;
	}
	if(t==NULL) return s;
	if(s->key < f->key) f->lchild = s;
	else f->rchild = s;
	return t;
}

bilist *CREATBST(keytype B[],int n) { //建立二叉排序树
	int i;
	bilist *t,*s;
	t=NULL;
	for(i=0; i<n; i++) {
		s=(bilist *)malloc(sizeof(bilist));
		s->lchild=NULL;
		s->rchild=NULL;
		s->key=B[i];
		t=INSERTBST(t,s);
	}
	return t;
}


bilist  *search(bilist *t,keytype k) { /*二叉检索树检索算法*/
	if((t==NULL)||(t->key==k))  return t;
	else if(t->key<k)
		return (search(t->rchild,k));
	else
		return(search(t->lchild,k));
}

main() {
	keytype A[MAXSIZE];
	int i,data,n=10;
	bilist *root;
	for(i=0; i<n; i++)
		scanf("%d",&A[i]);
	printf("\n");
	root=CREATBST(A,n);
	printf("please input the search key:");
	scanf("%d",&data);
	if(search(root,data)!=NULL) printf("search succeed! \n");
	else printf("search failed!\n ");
}

(3) 把二叉排序树的检索函数的递归算法改写为非递归算法,并在主函数中调用它,调试好程序并分析其运行结果。

#define MAXSIZE 100
#define NULL 0
#include<stdio.h>
#include<stdlib.h>
typedef int keytype;
typedef int elemtype;
typedef struct node {
	keytype key;   /*关键字域*/
	elemtype other;/*其他数据域*/
	struct node *lchild,*rchild;   /*左、右孩子指针*/
} bilist;             /*二叉检索树的结点结构*/

bilist *INSERTBST(bilist *t,bilist *s) {
	bilist *f,*p;
	p = t;
	while(p!=NULL) {
		f = p;
		if(s->key == p->key) return t;
		if(s->key < p->key) p = p->lchild;
		else p = p->rchild;
	}
	if(t==NULL) return s;
	if(s->key < f->key) f->lchild = s;
	else f->rchild = s;
	return t;
}

bilist *CREATBST(keytype B[],int n) { //建立二叉排序树
	int i;
	bilist *t,*s;
	t=NULL;
	for(i=0; i<n; i++) {
		s=(bilist *)malloc(sizeof(bilist));
		s->lchild=NULL;
		s->rchild=NULL;
		s->key=B[i];
		t=INSERTBST(t,s);
	}
	return t;
}


bilist  *search(bilist *t,keytype k) { /*二叉检索树检索算法*/
	while(t != NULL) {
		if(t->key == k)
			return t;
		if(t->key > k)
			t = t->lchild;
		else t = t->rchild;
	}
	return NULL;
}

main() {
	keytype A[MAXSIZE];
	int i,data,n=10;
	bilist *root;
	for(i=0; i<n; i++)
		scanf("%d",&A[i]);
	printf("\n");
	root=CREATBST(A,n);
	printf("please input the search key:");
	scanf("%d",&data);
	if(search(root,data)!=NULL) printf("search succeed! \n");
	else printf("search failed!\n ");
}
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 桂林电子科技大学创建FTP服务器是为了进行计算机网络实验。FTP(文件传输协议)是一种用于在网络上传输文件的协议,它能够实现简单、高效和可靠的文件传输。 在计算机网络实验中,FTP服务器的创建可以提供实验所需的数据文件、软件等资源,方便学生们进行实验操作和数据传输。通过搭建FTP服务器,学生们可以在实验室的计算机上通过FTP客户端登录服务器,实现文件的上传和下载。 此外,桂林电子科技大学创建FTP服务器还能够提供便捷的远程访问服务。学生们可以利用FTP客户端在校外通过互联网连接到FTP服务器,方便地获取实验所需的资料和软件。这样,不论是在校内还是校外,学生们都可以方便地进行实验和学习。 桂林电子科技大学创建FTP服务器的过程中,需要考虑服务器的安全性和稳定性。服务器应设置合理的访问权限和认证机制,确保只有授权的用户可以访问服务器并进行上传下载操作。此外,服务器应具备良好的稳定性和可靠性,以保证学生们在实验过程中不会因服务器故障而受到影响。 总而言之,桂林电子科技大学通过创建FTP服务器为计算机网络实验提供了便捷的文件传输和远程访问服务。这样的服务不仅方便了学生们的实验学习,也为他们提供了更广阔的学习空间和学习资源。 ### 回答2: 桂林电子科技大学创建FTP服务器是为了在计算机网络实验中提供一个安全、高效的文件传输和共享平台。 FTP(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的标准协议。它通过建立客户端和服务器之间的连接,实现文件的上传、下载、删除以及目录的创建和修改等功能。创建FTP服务器可以提供快速、稳定的文件传输服务,方便学生和教师在实验中共享和交流相关实验数据、文档和代码等。 首先,创建FTP服务器可以提供安全的文件传输环境。通过设置账号和密码登录验证机制,只有经过授权的用户才能访问服务器中的文件。同时,可以使用SSL/TLS等加密协议确保数据传输的机密性和可靠性,避免数据被窃听和篡改。 其次,创建FTP服务器可以提高文件传输效率。FTP支持并行传输,即多个文件可以同时上传或下载,提高了传输速度。而且,FTP服务器支持断点续传功能,即在传输过程中断开连接后,可以从断点处继续传输,避免重新传输文件,节省时间和带宽资源。 此外,创建FTP服务器还可以方便地管理文件和目录。可以创建不同的用户账号和权限,实现对不同文件的访问控制。可以创建各种目录,便于组织、分类文件,使文件的查找和管理更加方便。 总而言之,桂林电子科技大学创建FTP服务器是为了提供一个安全、高效的文件传输和共享平台,方便实验中的学生和教师进行数据交流和文件管理。同时,通过FTP服务器的创建和使用,使得计算机网络实验的进行更加便捷和高效。 ### 回答3: 桂林电子科技大学创建ftp服务器是为了进行计算机网络实验。FTP服务器(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的协议,通过FTP服务器,用户可以通过网络传输文件,实现文件的上传和下载。 在计算机网络实验中,创建FTP服务器具有以下作用和意义: 1. 文件传输:FTP服务器可以提供一个可靠的文件传输平台,使实验室的师生可以通过网络传输实验数据和文件,方便实验结果的收集和保存。 2. 实验数据共享:通过FTP服务器,实验室的师生可以共享实验数据和文件,方便教师和学生之间的交流和合作。教师可以将教学资料和实验指导文件上传到FTP服务器供学生下载,学生也可以将实验报告和数据上传到服务器与教师及其他同学分享。 3. 远程访问:创建FTP服务器使得实验室的师生能够通过网络远程访问服务器上的文件,无需亲自前往实验室进行操作。这对于一些需要频繁访问实验数据的实验室师生来说十分便利。 4. 数据备份与恢复:FTP服务器可以作为实验室数据的备份平台,及时备份实验数据和文件,保证数据的安全性和完整性。当实验室发生数据丢失或损坏时,可以通过FTP服务器上的备份文件进行数据恢复。 总之,桂林电子科技大学创建FTP服务器为实验室的师生提供了一个高效、便捷和安全的文件传输平台,在计算机网络实验中起到了重要的作用。通过FTP服务器的应用,实验室师生能够更好地进行实验数据的管理、共享和备份,提高了实验教学的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值