第17章 高级数据表示 17.7 二叉搜索树 (第三部分 试用树)
博客专区 > idreamo 的博客 > 博客详情
第17章 高级数据表示 17.7 二叉搜索树 (第三部分 试用树)
idreamo 发表于3个月前
第17章 高级数据表示 17.7 二叉搜索树 (第三部分 试用树)
  • 发表于 3个月前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

现在已经有了接口和函数实现,我们来使用它们。

程序示例使用菜单来选择向俱乐部成员花名册添加宠物、显示成员列表、报告成员数、核查成员及退出。函数main()很简单,它集中于实质性问题的概括。支持函数完成了大部分的工作。

/*petclub.c --使用二叉搜索树*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "tree.h"

char menu(void);
void addpet(Tree * pt);
void deoppet(Tree * pt);
void showpets(const Tree * pt);
void findpet(const Tree * pt);
void printitem(Item item);
void uppercase(char * str);

int main(void)
{
    Tree pets;
    char choice;

    IntializeTree(&pets);
    while((choice=menu())!='q')
    {
        switch(choice)
        {
            case 'a':addpet(&pets);
            break;
            case 'l':showpets(&pets);
            break;
            case 'f':findpet(&pets);
            break;
            case 'n':printf("%d pets in club\n",TreeItemCount(&pets));
            break;
            case 'd':droppet(&pets);
            break;
            default:puts("Switching error");
        }
    }
    DeleteAll(&pets);
    puts("Bye.");

    return 0;
}

char menu(void)
{
    int ch;

    puts("Nerfville Pet Club Membership program");
    puts("Enter the letter corresponding to your choice: ");
    puts("a) add a pet        l) show list of pets");
    puts("n) number of pets   f) find pets");
    puts("d) delete a pet     q) quit");
    while((ch=getchar())!=EOF)
    {
        while(getchar()!='\n')
            continue;
        ch=tolower(ch);
        if(strchr("alrfndq"==NULL))
            puts("Please enter an a,l,f,n,d, or q:");
        else
            break;
    }
    if(ch==EOF)  /*令EOF导致程序退出*/
    ch='q';

    return ch;
}

void addpet(Tree * pt)
{
    Item temp;

    if(TreeIsFull(pt))
        puts("No room in the club!");
    else
    {
        puts("please enter name of pet: ");
        gets(temp.petname);
        puts("please enter kind of pet: ");
        gets(temp.petkind);
        uppercase(temp.petname);
        uppercase(temp.petkind);
        AddItem(&temp,pt);
    }
}

void showpets(const Tree * pt)
{
    if(TreeIsEmpty(pt))
        puts("No entries!");
    else
        Traverse(pt,printitem);
}

void printitem(Item item)
{
    printf("Pet: %-19s kind: %-19s\n",item.petname,item.petkind);
}

void findpet(const Tree * pt)
{
    Item temp;

    if(TreeIsEmpty(pt))
    {
        puts("No entries!");
        return;    /*如果树为空,则退出函数*/
    }

    puts("Please enter the name of pet you wish to find: ");
    gets(temp.petname);
    puts("please enter pet kind: ");
    gets(temp.petkind);
    uppercase(temp.petname);
    uppercase(temp.petkind);
    printf("%s the %s",temp.petname,temp.petkind);
    if(Intree(&temp,pt))
        printf("is a member.\n");
    else
        printf("is not a member.\n");
}

void droppet(Tree * pt)
{
    Item temp;
    
    if(TreeIsEmpty(pt))
    {
        puts("No entries!");
        return;  /*如果树为空,则退出函数*/
    }
    
    puts("please enter name of pet you wish to delete: ");
    gets(temp.petname);
    puts("please enter pet kind: ");
    gets(temp.kind);
    uppercase(temp.petname);
    uppercase(temp.petkind);
    if(DeleteItem(&temp,pt))
        printf("is dropped from the club.\n");
    else 
        printf("is not a member.\n");
}

void uppercase(char * str)
{
    while(*str)
    {
        *str = toupper(*str);
        str++;
        
    }
}

程序将所有字母转换成大写,所以SNUFFY、Snuffy、snuffy、都被看作相同的名字。下面是一个运行示例:

Nerfville pet Club Membership Program
Enter the letter corresponding to your choice
a) add a pet       l) show list of pets
n) number of pets  f) find pets 
q) quit 
a
please enter name of pet:
Quincy
please enter pet kind:
pig
Nerfville pet Club Membership Program
Enter the letter corresponding to your choice
a) add a pet       l) show list of pets
n) number of pets  f) find pets 
q) quit 
a
please enter name of pet:
Betty
please enter pet kind:
Boa
Nerfville pet Club Membership Program
Enter the letter corresponding to your choice
a) add a pet       l) show list of pets
n) number of pets  f) find pets 
q) quit 
a
please enter name of pet:
Hiram Jinx
please enter pet kind:
domestic cat
Nerfville pet Club Membership Program
Enter the letter corresponding to your choice
a) add a pet       l) show list of pets
n) number of pets  f) find pets 
q) quit 
n
3 pets in club 
Nerfville pet Club Membership Program
Enter the letter corresponding to your choice
a) add a pet       l) show list of pets
n) number of pets  f) find pets 
q) quit 
l
pet:BETTY    kind:BOA
pet:HIRAM JINX  kind:DOMESTIC CAT
pet:QUINCY      kind:PIG
Nerfville pet Club Membership Program
Enter the letter corresponding to your choice
a) add a pet       l) show list of pets
n) number of pets  f) find pets 
q) quit 
q
Bye.


 

共有 人打赏支持
粉丝 13
博文 139
码字总数 224743
×
idreamo
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: