计算机软件基础实验指导
-C语言实现西安理工大学自动化与信息工程学院
2004年目 录
实验一 顺序表的插入、删除……………………………………..1
实验二 单链表的插入、删除……………………………..………4
实验三 顺序栈的入栈、出栈……………………………..………8
实验四 循环队列的入队、出队……………..…………..………10
实验五 稀疏矩阵的转置………………………………....………13
实验六 二叉排序树的建立、遍历………………………..…..…15
实验七 直接插入排序……………………………………..…..…19
实验八 直接选择排序……………………………………..…..…20
实验九 顺序、二分查找…………………………………..…..…22
实验十 二叉排序树查找…………………………………..…..…25
附录 实验报告要求……………..…………...…………..………28
实验一 顺序表的插入、删除(2学时)
一、实验目的
1、 理解线性表的顺序存储结构;
2、 能熟练建立一个顺序表,并能对其进行插入、删除等基本操作;
3、 能熟练运用宏定义、函数调用。
二、实验内容从键盘输入10个整数,建立一顺序表(顺序表最大长度为20),用顺序表完成在任意一个位置插入任意整数元素以及删除任意位置数据元素的操作(插入、删除位置及要插入元素数值均从键盘输入),进行完任一操作后将顺序表中的内容及表长输出。
三、参考源程序
#include <stdio.h>
#define MAXLEN 20
typedef int elemtype;
typedef struct
{
elemtype List[MAXLEN];
int Num;
}Seqlist;
int insert(Seqlist *la,int i,elemtype x);
int del(Seqlist *la,int i);
void output(Seqlist *la);
main()
{
Seqlist la;
int m,i;
elemtype x;
la.Num=-1;
printf("\nPlease input data:");
for(i=0;i<=9;i++)
{
++la.Num;
scanf(" %d",&la.List[i]);
}
printf("Please input the value of m:m=1---insert m=2---delete\nm=");
scanf("%d",&m);
if(m==1)
{printf("Please input insert location and insert data:");
scanf("%d%d",&i,&x);
insert(&la,i,x);
output(&la);
}
else if(m==2)
{printf("Please input delete location:");
scanf("%d",&i);
del(&la,i);
output(&la);
}
else
printf("The value of m is wrong!");
}
int insert (Seqlist *la,int i,elemtype x)
{
int j;
if (i<0||i>la->Num)
{
printf ("\n 插入位置不合理!");
return 0;}
else if (la->Num==MAXLEN-1)
{
printf ("\n 表满,不能插入!");
return 0;}
else
{
for ( j=la->Num; j>=i; j--)
la->List[j+1]=la->List[j];
la->List[i]=x;
la->Num++;
return 1;
}
}
int del (Seqlist *la,int i)
{
int j;
if (i<0||i>la->Num)
{
printf ("\n the position is invalid");
return 0;}
else
{
for ( j=i+1; j<=la->Num; j++)
la->List[j-1]=la->List[j];

la->Num--;
return 1;
}
}
void output(Seqlist *la)
{int m;
printf("当前的线性表为");
for(m=0;m<=la->Num;m++)
printf(" %d",la->List[m]);
printf("\n表长为%d\n",la->Num+1);
}
四、思考题
1.设顺序表L中的数据元素按递增排列,编写一个算法,将数据元素x插入到顺序表L的适当位置上,以保持顺序表的有序性。
2.设计一算法实现删除顺序表a中第i个元素起的k个元素。
typedef struct
{ int elem[100];
int length; /*顺序表的长度(即最大下标值)*/
}SqList;
3.设已有线性表la 的数据结构定义同上,编写一个算法,删除顺序表la中所有值为x的数据元素。
实验二 单链表的插入、删除(2学时)
一、实验目的
1、理解线性表的链式存储结构;
2、能熟练建立一个单链表,并能对其进行插入、删除等基本操作;
3、能理解指针的指针类型的运用。
二、实验内容首先建立一个数据域为整数的由10个结点组成的单链表,然后用单链表完成在任意一个位置插入任意整数元素以及删除任意位置数据元素的操作(插入、删除位置及要插入元素数值均从键盘输入),进行完任一操作后将顺序表中的内容及表长输出。 三、参考源程序
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int elemtype;
struct node{elemtype data;
struct node *next;
};
typedef struct node slnodetype;
int initiate1(slnodetype **h)
{
*h=(slnodetype * )malloc(sizeof(slnodetype));
if ((*h)==NULL) return 0;
(*h)->next=NULL;
return 1;
}
int CreatL1(slnodetype **h,elemtype a[],int n)
{
slnodetype *p,*s;
int j;
initiate1(h);
p=*h;
for(j=0;j<=n-1;j++)
{
if ((s=(slnodetype * )malloc(sizeof(slnodetype)))==NULL)
return 0;
s->data=a[j];
s->next=NULL;
p->next=s;
p=s;
}
return 1;
}
slnodetype *getSL(slnodetype *head,int i)
{
slnodetype *p;
int j;
p=head->next;
while((p!=NULL)&&(j<i))
{ p=p->next;
j++;
}
return (p);
}
int insertsl(slnodetype *h,int i,elemtype x)
{
slnodetype *p,*s;
int j;
p=h;
j=0;
while((p->next!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("\n插入位置不合理!");
return 0;
}
if ((s=(slnodetype * )malloc(sizeof(slnodetype)))==NULL)
return 0;
s->data=x;
s->next=p->next;
p->next=s;
return 1;
}
int deletesl(slnodetype *h,int i)
{
slnodetype *p,*s;
int j;
p=h;
j=0;
while((p->next->next!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
if (j!=i-1)
{
printf("\n 删除位置不合理!");
return 0;
}
s=p->next;
p->next=s->next;
free(s);
return 1;
}
out_put(slnodetype *head)
{slnodetype *p;
int i=0;
p=head->next;
printf("\n当前的线性表数据内容为");
while(p!=NULL)
{printf(" %d",p->data);
p=p->next;
i++;
}
printf("\n线性表的表长为%d\n",i);
}
void main()
{
int i,j,m;
elemtype x,a[10];
slnodetype *head;
for (i=0;i<=9;i++)
{
printf("\nplease input NO.%d data ",i+1);
scanf("%d",&a[i]);
}
CreatL1(&head,a,10);
out_put(head);
printf("\nPlease input the value of m:m=1---insert m=2---delete m=3--exit\nm=");
scanf("%d",&m);
if(m==1)
{printf("Please input insert location and insert data:");
scanf("%d%d",&i,&x);
insertsl(head,i,x);
out_put(head);
}
else if(m==2)
{printf("Please input delete location:");
scanf("%d",&j);
deletesl(head,j);
out_put(head);
}
else if(m==3)
exit(1);
else
printf("The value of m is wrong!");
}
四、思考题
1. 编写一个算法,删除单链表l中值相同的多余结点。
2.实现单链表的就地逆序,设其头结点指针为head,编写一个算法将单链表逆置,即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。
3.假设现有一个带头结点的单链表head,试写出将单链表中结点数据值为偶数的结点,复制并放入另一个带头结点的单链表head1的头部的算法。
4.设现有一个带头结点的单链表(头指针为head),试写出一算法,删除该单链表中数据为奇数的所有结点。
实验三 顺序栈的入栈、出栈(2学时)
一、实验目的
1、理解堆栈是一种先进后出的特殊线性表;
2、能熟练掌握顺序栈的入栈出栈操作;
3、掌握如何判断以及何时该判断堆栈满或空的条件。
二、实验内容进行顺序栈初始化,实现9个数据的依次入栈及出栈操作。
三、参考源程序
#include <stdio.h>
#include <malloc.h>
#define maxlen 10
#define m 9
typedef int elemtype;
typedef struct {
elemtype stack[maxlen];
int top;
}seqstack;
seqstack *inistack()
{
seqstack *s;
if ((s=(seqstack *)malloc(sizeof(seqstack)))==NULL)
return 0;
s->top=-1;
return s;
}
int push(seqstack *s,elemtype x)
{
if (s->top==maxlen-1)
{
printf("\nStack is full");
return 0;
}
s->top++;
s->stack[s->top]=x;
return 1;
}
elemtype pop(seqstack *s)
{
if(s->top==-1)
{
printf("\n Stack is empty!");
return 0;
}
else return (s->stack[(s->top)--]);
}
main()
{int x,i,j;
seqstack *s;
s=inistack();
for(i=1;i<=m;i++)
{printf("\nPlease input a data!");
scanf("%d",&x);
push(s,x);
}
printf("The output order is:");
for(j=s->top;j>=0;j--)
printf(" %d",pop(s));
}
四、思考题
1.如何实现两个顺序栈的共用?
2.设两个栈(stack1,stack2)共享一个一维数组空间s[m],它们的栈底分别设在数组的两端,试编写一算法,从键盘输入一个整数x,该数大于100时放入stack2,否则放入stack1。
#define m 10
typedef struct stack
{int s[m];
int top1;
int top2;
}STACK;
STACK *p;
实验四 循环队列的入队、出队(2学时)
一、实验目的
1、 理解队列是一种先进先出的特殊线性表;
2、 能熟练建立循环队列,掌握判断循环队列队满和队空的条件;
3、能熟练掌握循环队列的入队出队操作。
二、实验内容先建立一个循环队列,然后完成任意队列元素的入队和出队操作。
三、参考源程序
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define maxlen 100
typedef int elemtype;
typedef struct
{ elemtype queue[maxlen];
int front,rear;
} sequeue;
void iniqueue(sequeue *sq)
{
sq->front=0;
sq->rear=0;
}
int addqueue(sequeue *sq,elemtype x)
{
if (sq->front==(sq->rear+1)%maxlen)
{
printf("\nQueue is full");
return 0;
}
sq->rear=(sq->rear+1)%maxlen;
sq->queue[sq->rear]=x;
return 1;
}
elemtype delqueue(sequeue *sq)
{
if(sq->front==sq->rear)
{
printf("\n Queue is empty!");
exit(1);
}
sq->front=(sq->front+1)%maxlen;
return (sq->queue[sq->front]);
}
output(sequeue *sq)
{ int m;
m=sq->front;
printf("\nThe queue is,");
while(m!=sq->rear)
{
m=(m+1)%maxlen;
printf(" %d",sq->queue[m]);
}
}
void main()
{
int h,a;
sequeue *sq;
if ((sq=(sequeue*)malloc(sizeof(sequeue)))==NULL)
exit(0);
iniqueue(sq);
printf("\nPlease input a data! enter'0'—exit\n");
scanf("%d",&a);
while(a!=0)
{addqueue(sq,a);
printf("Please input a data!\n ");
scanf("%d",&a);
}
output(sq);
printf("\nDo you want to add a data or delete a data? 1--add 2--delete 0--exit\n");
scanf("%d",&h);
while(h!=0)
{if(h==1)
{printf("Please input the add data!");
scanf("%d",&a);
addqueue(sq,a);
output(sq);
printf("\nGO ON? 1--add 2--delete 0--exit\n");
scanf("%d",&h);
}
else if(h==2)
{a=delqueue(sq);
printf("The delete data is %d",a);
output(sq);
printf("\nGO ON? 1--add 2--delete 0--exit\n");
scanf("%d",&h);
}
}
}
四、思考题
除了循环队列,还有哪些方法可以解决顺序队列“假溢出”的问题?
实验五 稀疏矩阵的转置一、实验目的
1、熟悉数组的有关概念;
2、能熟练掌握稀疏矩阵的三元组存储结构的转置方法。
二、实验内容用三元组顺序表存储结构存储稀疏矩阵,实现稀疏矩阵的转置运算。
三、参考源程序
#include,stdio.h”
#define maxsize 10000
typedef int elemtype;
typedef struct
{
int i,j;
elemtype d;
}tupletype;
typedef struct
{
tupletype data[maxsize];
int md,nd,td;
}tabletype;
void trantup(tabletype sa,tabletype *sb);
main( )
{
tabletype a={{{1,2,1},{1,4,2},{3,2,3},{8,2,4},{9,3,5},{9,4,6}},29,33,6};tabletype b;int k;
trantup(a,&b);
printf(“转置前的矩阵”);
for (k=0;k<a.td;k++)
printf(“i=%d j=%d data=%d\n”,a.data[k].i,a.data[k].j,a.data[k].d);
printf(“转置后的矩阵”);
for (k=0;k<a.td;k++)
printf(“i=%d j=%d data=%d\n”,b.data[k].i,b.data[k].j,b.data[k].d);
}
void trantup(tabletype sa,tabletype *sb)
{ int p,q,v;
sb->md=sa.nd;
sb->nd=sa.md;
sb->td=sa.td;
if(sb->td!=0)
{ q=0;
for (v=0;v<sa.nd;v++)
{ for(p=0;p<sa.td;p++)
{ if (sa.data[p].j==v)
{ sb->data[q].i=sa.data[p].j;
sb->data[q].j=sa.data[p].i;
sb->data[q].d=sa.data[p].d;
q++; }
}
}
}
}
四、思考题采用三元组存储稀疏矩阵的目的是什么?
实验六 二叉排序树的建立及遍历(4学时)
一、实验目的
1、掌握二叉排序树的有关概念;
2、能根据所给序列构造(建立)二叉排序树;
3、能熟练掌握二叉树的插入算法;
4、能熟练掌握二叉树的先序、中序和后序遍历算法。
二、实验内容根据给定序列建立二叉排序树,显示中序、后序、先序的遍历结果。
三、参考源程序
#include <stdio.h>
#include <malloc.h>
typedef int elemtype ;
typedef struct btreenode
{
elemtype Data;
struct btreenode *lchild;
struct btreenode *rchild;
} TREENODE;
TREENODE *Create(elemtype x,TREENODE *lbt,TREENODE *rbt);
TREENODE *InsertL(elemtype x,TREENODE *Parent);
TREENODE *InsertR(elemtype x,TREENODE *Parent);
void preorder(TREENODE *bt);
void inorder(TREENODE *bt);
void postorder(TREENODE *bt);
main( )
{int x;
TREENODE *bt,*p,*q;
printf("input root");
scanf("%d",&x);
p=Create(x,NULL,NULL);
bt=p;
printf("please input data,-1--end,");
scanf("%d",&x);
while(x!=-1)
{p=bt;
q=p;
while(q!=NULL)
{ p=q;
if (x<p->Data)
q=p->lchild;
else
q=p->rchild;
}
if (x<p->Data)
InsertL(x,p);
else
InsertR(x,p);
printf("please input data,-1--end,");
scanf("%d",&x);
}
printf("\n先序遍历结果为:");
preorder(bt);
printf("\n中序遍历结果为:");
inorder(bt);
printf("\n后序遍历结果为:");
postorder(bt);
}
TREENODE *Create(elemtype x,TREENODE *lbt,TREENODE *rbt)
{
TREENODE *p;
if((p=(TREENODE * )malloc(sizeof(TREENODE)))==NULL)
return NULL;
p->Data=x;
p->lchild=lbt;
p->rchild=rbt;
return p;
}
TREENODE *InsertL(elemtype x,TREENODE *Parent)
{ TREENODE *p;
if(Parent==NULL)
{ printf("\n插入出错!");
return NULL; }
if((p=(TREENODE * )malloc(sizeof(TREENODE)))==NULL)
return NULL;
p->Data=x;
p->lchild=NULL;
p->rchild=NULL;
if(Parent->lchild==NULL) Parent->lchild=p;
else
{ p->lchild=Parent->lchild;
Parent->lchild=p; }
return p;
}
TREENODE *InsertR(elemtype x,TREENODE *Parent)
{ TREENODE *p;
if(Parent==NULL)
{ printf("\n插入出错!");
return NULL; }
if((p=(TREENODE * )malloc(sizeof(TREENODE)))==NULL)
return NULL;
p->Data=x;
p->lchild=NULL;
p->rchild=NULL;
if(Parent->rchild==NULL) Parent->rchild=p;
else
{ p->rchild=Parent->rchild;
Parent->rchild=p; }
return p;
}
void preorder(TREENODE *bt)
{
if (bt==NULL) return;
printf(" %d",bt->Data);
if(bt->lchild!=NULL) preorder(bt->lchild);
if(bt->rchild!=NULL) preorder(bt->rchild);
}
void inorder(TREENODE *bt)
{
if (bt==NULL) return;
if(bt->lchild!=NULL) inorder(bt->lchild);
printf(" %d",bt->Data);
if(bt->rchild!=NULL) inorder(bt->rchild);
}
void postorder(TREENODE *bt)
{
if (bt==NULL) return;
if(bt->lchild!=NULL) postorder(bt->lchild);
if(bt->rchild!=NULL) postorder(bt->rchild);
printf(" %d",bt->Data);
}
四、思考题
1.请用先序、中序、后序遍历算法中的任一算法改成统计二叉树中数据元素值为x的结点个数的算法。
2.请用先序、中序、后序遍历算法中的任一算法改成统计二叉树中叶子结点个数的算法。
实验七 直接插入排序(2学时)
一、实验目的
1、掌握直接插入排序的基本思想;
2、能根据所给序列写出直接插入排序的排序过程;
3、能熟练掌握直接插入排序算法。
二、实验内容对于一组给定关键字序列,用直接插入排序算法对其进行排序并显示结果。
三、参考源程序
#include <stdio.h>
#define MAX 11
typedef struct
{ int key;
char name;
} elemtype;
void insertsort(elemtype x[],int n);
main()
{
elemtype x[MAX];
int n,i;
printf("\nPlease input the number of data,n=");
scanf("%d",&n);
printf("\nplease input the data to be sorted:");
for(i=1;i<=n;i++)
scanf("%d",&x[i].key);
printf("The original data is:\t");
for(i=1;i<=n;i++)
printf("%d\t",x[i].key);
printf("\n\n");
insertsort(x,n);
printf("\n\n");
printf("The fianl result is:\t ");
for(i=1;i<=n;i++)
printf("%d\t",x[i].key);
}
void insertsort(elemtype x[],int n)
{int i,j,m,k;
for(i=2;i<=n;i++)
{x[0]=x[i];
j=i-1;
while(x[0].key<x[j].key)
{x[j+1]=x[j];
j--;
}
x[j+1]=x[0];
m=i-1;
printf("\nNo.%d insert sort result\t",m);
for(k=1;k<=n;k++)
printf("%d\t",x[k].key);
}
}
四、思考题直接插入排序的时间复杂度为多少,对于什么情况排序速度最快?
实验八 直接选择排序(2学时)
一、实验目的
1、掌握直接选择排序的基本思想;
2、能根据所给序列写出直接选择排序的排序过程;
3、能熟练掌握直接选择排序算法。
二、实验内容对于一组给定关键字序列,用直接选择排序算法对其进行排序并显示结果。
三、参考源程序
#include <stdio.h>
#define MAX 11
typedef struct
{ int key;
char name;
} elemtype;
void selectsort(elemtype x[],int n);
main()
{
elemtype x[MAX];
int n,i;
printf("\nPlease input the number of data,n=");
scanf("%d",&n);
printf("\nplease input the data to be sorted:");
for(i=0;i<n;i++)
scanf("%d",&x[i].key);
printf("The original data is:\t");
for(i=0;i<n;i++)
printf("%d\t",x[i].key);
printf("\n\n");
selectsort(x,n);
printf("\n\n");
printf("The fianl result is:\t");
for(i=0;i<n;i++)
printf("%d\t",x[i].key);
}
void selectsort(elemtype x[],int n)
{ int i,j,small,m,k;
elemtype temp;
for (i=0;i<n-1;i++)
{ small=i;
for (j=i+1;j<n;j++)
if (x[j].key<x[small].key)
small=j;
if (small!=i)
{ temp=x[i];
x[i]=x[small];
x[small]=temp;
}
m=i+1;
printf("\nNo.%d select sort result\t",m);
for(k=0;k<n;k++)
printf("%d\t",x[k].key);
}
}
四、思考题直接选择排序的时间复杂度为多少?
实验九 顺序查找和二分查找(2学时)
一、实验目的
1、掌握顺序查找和二分查找的基本思想;
2、能根据所给序列写出二分查找的查找过程;
3、能熟练掌握顺序查找和二分查找算法。
二、实验内容输入结构为学号 姓名 分数的若干学生信息(按学号大小存放),分别用顺序和二分查找方法以学号为关键字查找学生信息。
三、参考源程序
#include <stdio.h>
#define MAXLEN 3
struct data{int num;
char name[20];
int score;
};
typedef struct data DATATYPE;
seqsearch(DATATYPE stu[],int key)
{
int i;
stu[0].num=key;
i=MAXLEN;
while(stu[i].num!=key)
i--;
if(i==0)
return -1;
else
return i;
}
binsearch(DATATYPE stu[],int key)
{
int low,mid,hig;
low=1;
hig=MAXLEN;
while(low<=hig)
{
mid=(low+hig)/2;
if(key ==stu[mid].num)
return mid;
else if(key >stu[mid].num)
low=mid+1;
else
hig=mid-1;
}
return -1;
}
output_1(DATATYPE stu[],int i)
{
printf("\nThe data of student%d is:",i);
printf("\nNumber:%d",stu[i].num);
printf("\nName:%s",stu[i].name);
printf("\nScore:%d",stu[i].score);
}
main()
{
int m,n,i,j;
DATATYPE stu[MAXLEN+1];
for(j=1;j<=MAXLEN;j++)
{printf("\nThe data of student%d is:\n",j);
printf("Number:");
scanf("%d",&stu[j].num);
printf("Name:");
scanf("%s",stu[j].name);
printf("Score:");
scanf("%d",&stu[j].score);
}
printf("Please choose:m=1--seqsearch,m=2--binsearch m=");
scanf("%d",&m);
printf("Please input the number of student:");
scanf("%d",&n);
if(m==1)
{i=seqsearch(stu,n);
output_1(stu,i);
}
else if(m==2)
{i=binsearch(stu,n);
output_1(stu,i);
}
else
printf("The number of m is wrong!");
}
四、思考题顺序查找和二分查找的平均查找长度各为多少?
实验十 二叉排序树查找(2学时)
一、实验目的
1、掌握二叉排序树的构造;
2、能熟练掌握二叉排序树查找的过程及算法。
二、实验内容将一个记录集合用一颗二叉排序树表示,并查找其中某一记录
三、参考源程序
#include <stdio.h>
#include <malloc.h>
typedef int elemtype;
typedef struct btreenode
{
elemtype key;
struct btreenode *lchild;
struct btreenode *rchild;
} TREENODE;
TREENODE *Create(elemtype x,TREENODE *lbt,TREENODE *rbt);
TREENODE *InsertL(elemtype x,TREENODE *Parent);
TREENODE *InsertR(elemtype x,TREENODE *Parent);
TREENODE *bstsearch(TREENODE *bt,int key);
main( )
{int x,k;
TREENODE *bt,*p,*q;
printf("input root");
scanf("%d",&x);
p=Create(x,NULL,NULL);
bt=p;
printf("please input data,-1--end,");
scanf("%d",&x);
while(x!=-1)
{p=bt;
q=p;
while(q!=NULL)
{ p=q;
if (x<p->key)
q=p->lchild;
else
q=p->rchild;
}
if (x<p->key)
InsertL(x,p);
else
InsertR(x,p);
printf("please input data,-1--end,");
scanf("%d",&x);
}
printf("\nSearch key= ");
scanf("%d",&k);
q=bstsearch(bt,k);
if(q==NULL)
printf("\nsorry,there is no this data!");
else
printf("\nok,find it! the address is q=%u\n",q);
}
TREENODE *Create(elemtype x,TREENODE *lbt,TREENODE *rbt)
{
TREENODE *p;
if((p=(TREENODE * )malloc(sizeof(TREENODE)))==NULL)
return NULL;
p->key=x;
p->lchild=lbt;
p->rchild=rbt;
return p;
}
TREENODE *InsertL(elemtype x,TREENODE *Parent)
{ TREENODE *p;
if(Parent==NULL)
{ printf("\n插入出错!");
return NULL; }
if((p=(TREENODE * )malloc(sizeof(TREENODE)))==NULL)
return NULL;
p->key=x;
p->lchild=NULL;
p->rchild=NULL;
if(Parent->lchild==NULL) Parent->lchild=p;
else
{ p->lchild=Parent->lchild;
Parent->lchild=p; }
return p;
}
TREENODE *InsertR(elemtype x,TREENODE *Parent)
{ TREENODE *p;
if(Parent==NULL)
{ printf("\n插入出错!");
return NULL; }
if((p=(TREENODE * )malloc(sizeof(TREENODE)))==NULL)
return NULL;
p->key=x;
p->lchild=NULL;
p->rchild=NULL;
if(Parent->rchild==NULL) Parent->rchild=p;
else
{ p->rchild=Parent->rchild;
Parent->rchild=p; }
return p;
}
TREENODE *bstsearch(TREENODE *bt,int key)
{ TREENODE *p;
if (bt==NULL)
return NULL;
p=bt;
while (p!=NULL&&p->key!=key)
{ if(key<p->key)
p=p->lchild;
else
p=p->rchild;
}
return (p);
}
四、思考题二叉排序树查找是否和二分查找的时间性能相同?
实验报告要求一、 实验目的二、 实验内容三、 程序流程图四、 实验结果(要求检测所有情况的正确性)
五、 思考题