C语言编写的贪食蛇程序.c

//家谱的建立与查询
#include "stdio.h"
#include "stdlib.h"


typedef struct node{
char  name;
char  sex;
int   age;
int   flag;
}node;


typedef struct ft{
struct node l;
struct node m;
struct ft *lchild;
struct ft *rchild;
}ft;


ft *search(ft *p,char ch)//输入头指针,姓名
{
ft *q;


if(p==NULL) return NULL;//没有家谱,头指针下为空


if(p->l.name==ch) return p;//家谱不为空,头指针下有这个人
if(p->m.name==ch) return p;//家谱不为空,头指针下有这个人
if(p->lchild)
{
q=search(p->lchild,ch);//在做孩子中找
if(q) return q;//找到
}
if(p->rchild)
{
q=search(p->rchild,ch);//在右孩子中找
if(q!=NULL) return q;
}


    return NULL;//没有找到
}
void done(ft *p,char b,char c,int a)//建立家谱孩子结点
{  
p->l.name=b;
    p->l.sex=c;
    p->l.age=a;
    p->l.flag=1;//标志设置
}
void done1(ft *p,char b,char c,int a)//建立家谱配偶节点
{  
p->m.name=b;
    p->m.sex=c;
    p->m.age=a;
    p->m.flag=1;
}




void main()
{
ft  *root,*n,*h,*t=NULL;
int i,j=1,a,flag=0;
    char b,c,d;
    
   
printf("***\t***\t***\t家     谱\t***\t***\t***\n");
printf("建立家谱的头指针:\n");

    
    root=(ft *)malloc(sizeof(ft));
printf("输入姓名(char),性别(char),年龄(int):\n");
    scanf("%c %c %d",&b,&c,&a);//输入姓名,性别,年龄
    
root->rchild=NULL;
root->lchild=NULL;
   
     done(root,b,c,a);//存入结构




 while(j!=0)
{
printf("选择操作(输入1或2):\n\t0.退出\n\t1.输入\n\t2.查找\n ");
scanf("%d",&j);

if(j==1)
  {
getchar();
printf("请输入相关人姓名:\n");//判断是否有重名
scanf("%c",&d);
n=search(root,d);
while(n==NULL)
{

printf("此人不存在,请输入姓名:\n");
getchar();
scanf("%c",&d);
n=search(root,d);
}

     
printf("\t选择家庭成员类别:\n\t1.配偶\n\t2.孩子\n");
 scanf("%d",&i);
if(i==1)
{     
getchar();
printf("配偶输入:\n");
    scanf("%c %c %d",&b,&c,&a);
//h=(ft *)malloc(sizeof(ft));
    done1(n,b,c,a);
    printf("完成!\n");
}

else//i=2孩子 
{
 getchar();
 if(n->rchild==NULL)
 { 
 
  n->rchild=(ft *)malloc(sizeof(ft));
        
        n->rchild->lchild=NULL;
        n->rchild->rchild=NULL;
printf("孩子输入:\n");
        scanf("%c %c %d",&b,&c,&a);
        done(n->rchild,b,c,a);
         printf("完成!\n");
      }
  else{
      
      n=n->rchild;
          while(n->lchild!=NULL)
            n=n->lchild;
      t=(ft *)malloc(sizeof(ft));
      printf("孩子输入:\n");
      scanf("%c %c %d",&b,&c,&a);
      done(t,b,c,a);
      t->lchild=NULL;
          t->rchild=NULL;
      n->lchild=t;
          
       
      printf("完成!\n");
       }
 
}

}
if(j==2)
  {
  getchar();
printf("输入姓名,查找相关信息:\n");
scanf("%c",&d);
n=search(root,d);
while(n==NULL)
{

printf("此人不存在,请再次输入:\n");
getchar();
scanf("%c",&d);
n=search(root,d);
}


printf("此人:\n");//?
printf("%c %c %d\n",n->l.name,n->l.sex,n->l.age);
printf("此人的配偶为:\n");//?


if(n->m.flag==1)
printf("%c %c %d\n",n->m.name,n->m.sex,n->m.age);
else printf("此人未婚!\n");
printf("此人的孩子:\n");
if(n->rchild==NULL)
printf("此人没有孩子!\n");
else if(n->rchild->lchild==NULL)
printf("%c %c %d\n",n->rchild->l.name,n->rchild->l.sex,n->rchild->l.age);
else{
printf("%c %c %d\n",n->rchild->l.name,n->rchild->l.sex,n->rchild->l.age);
t=n->rchild->lchild;
while(t!=NULL)
{

printf("%c %c %d\n",t->l.name,t->l.sex,t->l.age);
t=t->lchild;

}
}

  }
}


 printf("完成!");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值