首页> 攻略 > 数据结构课设,看完你就知道了

数据结构课设,看完你就知道了

时间:2021-01-11 19:32:55 编辑:天晴网友

我的数据结构课设

操作方法

01

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[10][10],b[10],c[10],d[10];
typedef struct BSTNode//结构体(包括节点信息 左右儿子)
{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
int InsertBST(BSTree &t,int k)
{//若二叉排序树t中没有关键字k,则插入,否则直接返回
BSTree p,f;
p=t;
while(p)                           //查找插入位置
{
if(p->key==k){
printf("树中已有该数 ");
return 0;}                 //已有k,无需插入
f=p;                         //f保存当前查找的结点
p=(k<p->key)?p->lchild:p->rchild;   //若k<p->key,在左子树上查找,否则在右子树上查找
}
p=(BSTree)malloc(sizeof(BSTNode));
p->key=k;
p->lchild=p->rchild=NULL;
if(t==NULL)
t=p;                      //如果是空树,则把输入的数给树根
else if (k<f->key)
f->lchild=p;
else f->rchild=p;
return 1;
}//InsertBST
int Delete(BSTree bst, int X)
//在二叉排序树bst上,删除其关键字为X的结点。
{
BSTree f,p=bst;
while (p && p->key!=X) {//查找值为X的结点
if (p->key>X)  {f=p; p=p->lchild;}
else{f=p; p=p->rchild;}
}
if (p==NULL)
{
printf("无关键字为%d的结点 ",X);
return 0;
}
if (p->lchild==NULL)
{  //被删结点无左子树
if (f->lchild==p) f->lchild=p->rchild;//将被删结点的右子树接到其双亲上
else f->rchild=p->rchild;
}
else   //被删结点有左子树
{
BSTree q,s;
q=p;
s=p->lchild; //s指向被删结点左子树的根
while (s->rchild !=NULL) //查左子树中最右下的结点(中序最后结点)
{
q=s;
s=s->rchild;
}
p->key=s->key; //结点值用其左子树最右下的结点的值代替
if (q==p)
p->lchild=s->lchild;//被删结点左子树的根结点无右子女
else
q->rchild=s->lchild; //s是被删结点左子树中序最后一个结点
free(s);
return 1;
}
}
void found(BSTree &p,int k)
{
while(p)                           //查找插入位置
{
if (p->key==k)
{
printf("             %s--------------------------%d ",a[p->key],p->key);
break;
}
p=(k<p->key)?p->lchild:p->rchild;   //若k<p->key,在左子树上查找,否则在右子树上查找
}
if(p->key!=k)
printf("        没有这样的章节 ");
}
void change(BSTree &p,int k)
{
int j;int t=0;
while(p)
{
if(p->key==k)
{
printf("输入更改后的章节名称 ");
scanf("%s",c);
t=1;
strcpy(a[k],c);
break;
}
p=(k<p->key)?p->lchild:p->rchild;
}
if(t==0) printf(" 没有这样的章节 ");
}
void zhongxu(BSTree T){
if(T){
zhongxu(T->lchild);
printf("            %s--------------------------%d ",a[T->key],T->key);
zhongxu(T->rchild);
}
}//中序
int main()
{
int id,k;
BSTree t=NULL;
while(1){
printf("o^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^o ");
printf("o^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^o ");
printf("o^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^o ");
printf("o^o o*o o-o o^o   请输入所需的功能        o^o o*o o-o o^o  ");
printf("o^o o*o o-o o^o   1.插入                  o^o o*o o-o o^o  ");
printf("o^o o*o o-o o^o   2.删除                  o^o o*o o-o o^o  ");
printf("o^o o*o o-o o^o   3.输出目录              o^o o*o o-o o^o  ");
printf("o^o o*o o-o o^o   4.查询                  o^o o*o o-o o^o  ");
printf("o^o o*o o-o o^o   5.更改目录              o^o o*o o-o o^o  ");
printf("o^o o*o o-o o^o   6.退出                  o^o o*o o-o o^o  ");
printf("o^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^o ");
printf("o^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^oo^o o*o o-o o^o ");
scanf("%d",&id);
switch(id)
{
case 1:{
printf("-----------------请输入要插入的目录页数:------------------ ");
scanf("%d",&k);
printf("-----------------请输入要插入的目录名称:------------------ ");
scanf("%s",a[k]);
InsertBST(t,k);
break;
}
case 2:{
printf("-----------------请输入需要删除的数:------------------------ ");
scanf("%d",&k);
Delete(t,k);
break;
}
case 3:{
printf("                         目录 ");
zhongxu(t);
break;
}
case 4:
{
int i;int g=0;
printf("--------------输入章节名称 ");
scanf("%s",b);
for(i=0;i<10;i++)
{
if(strcmp(a[i],b)==0)
{
found(t,i);
g=1;break;
}
}
if(g==0)printf("--------没有这样的章节- ");
break;
}
case 5:
{int i;int g=0;
printf("---------------输入更改章节名称 ");
scanf("%s",d);
for(i=0;i<10;i++)
{
if(strcmp(a[i],d)==0)
{
change(t,i);g=1;
break;
}
}
if(g==0)printf("--------没有这样的章节- ");
break;
}
case 6:
exit(0);
break;
default:
printf("输入错误!");
break;
}
}
return 0;
}

好了,以上就是大致内容了,(END)

相关文章

相关软件