文档章节

第17章 高级数据表示 17.7 二叉搜索树 (第三部分 试用树)

idreamo
 idreamo
发布于 2017/09/10 07:32
字数 788
阅读 13
收藏 0

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

程序示例使用菜单来选择向俱乐部成员花名册添加宠物、显示成员列表、报告成员数、核查成员及退出。函数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.


 

© 著作权归作者所有

共有 人打赏支持
idreamo
粉丝 17
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
转行程序员?你可能忽略了一件事。

     程序 = 数据结构 + 算法   ——图灵奖得主,计算机科学家N.Wirth(沃斯)      作为程序员,我们做机器学习也好,做python开发也好,java开发也好。   有一种对所有程序员无一...

java进阶架构师
2018/10/25
0
0
算法知识梳理(10) - 二叉查找树

面试算法代码知识梳理系列 算法知识梳理(1) - 排序算法 算法知识梳理(2) - 字符串算法第一部分 算法知识梳理(3) - 字符串算法第二部分 算法知识梳理(4) - 数组第一部分 算法知识梳理(5) - 数...

泽毛
2017/12/18
0
0
LeetCode算法题-Convert Sorted Array to Binary Search Tree(Java实现)

这是悦乐书的第166次更新,第168篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第25题(顺位题号是108)。给定一个数组,其中元素按升序排序,将其转换为高度平衡的二叉搜索树...

小川94
2018/11/09
0
0
[算法总结] 20 道题搞定 BAT 面试——二叉树

本文首发于我的个人博客:尾尾部落 0. 几个概念 完全二叉树:若二叉树的高度是h,除第h层之外,其他(1h-1)层的节点数都达到了最大个数,并且第h层的节点都连续的集中在最左边。想到点什么没...

繁著
2018/09/04
0
0
算法之路

最近在GitHub上看到的某位学友的算法学习规划,贴过来与各位共勉。有新的内容可以文末留言补充。 学习方法 把所有经典算法写一遍 看算法有关源码 加入算法学习社区,相互鼓励学习 看经典书籍...

李序锴
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HTTP 304状态码

客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified ...

Jack088
9分钟前
0
0
MyBatis学习笔记(二)

mybatis执行过程架构图 1、mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。 mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql...

梦想_与_现实
14分钟前
0
0
分布式锁简单入门以及三种实现方式介绍

分布式锁简单入门以及三种实现方式介绍

zbbmaster
24分钟前
0
0
PHP接收前端传值各种情况整理

PHP接收前端传值各种情况整理 服务端代码: header('Access-Control-Allow-Origin:*');var_dump($_POST);exit; 情况 1) 传null $.post('http://xxxxx.xx/index.php', { "test": null}......

SSSWIIILLL
47分钟前
3
0
利用神器BTrace 追踪线上 Spring Boot应用运行时信息

概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值、外部调用情况 以及 函数执行时间等信...

CodeSheep
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部