文档章节

第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
粉丝 15
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
转行程序员?你可能忽略了一件事。

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

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

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

泽毛
2017/12/18
0
0
算法之路

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

李序锴
2017/11/08
0
0
LeetCode算法题-Convert Sorted Array to Binary Search Tree(Java实现)

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

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

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

繁著
09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
3
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
3
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
4
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
4
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部