| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 720 人关注过本帖
标题:strcmp函数的用法问题
只看楼主 加入收藏
lxh30907
Rank: 1
等 级:新手上路
帖 子:22
专家分:9
注 册:2010-12-15
结帖率:60%
收藏
已结贴  问题点数:15 回复次数:5 
strcmp函数的用法问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
//二叉树
typedef struct BiTreeNode
{
    char book_name[20];
    char writer[10];
    int year;
    struct BiTreeNode * lchild;
    struct BiTreeNode * rchild;
}Book;

Book * InitBiTree()
{
     Book * BookList;
     BookList = (Book *)malloc(sizeof(Book));
     strcpy(BookList->book_name,"");
     strcpy(BookList->writer,"");
     BookList->year=-1;
     BookList->lchild=0;
     BookList->rchild=0;
     return BookList;
}


void Insert(Book * BookList, Book * newBook)
{
    if (strcmp(BookList->book_name,newBook->book_name)>0)  //这里输入<就无显示了
    {
        if (BookList->lchild==0)
            BookList->lchild=newBook;
        else
            Insert(BookList->lchild, newBook);//递归调用
    }

    else
    {
        if (BookList->rchild==0)
           BookList->rchild=newBook;
        else
           Insert(BookList->rchild, newBook);//递归调用
    }
}


void InOrder(Book * BookList)
{
    if (BookList==0) return;
    if (BookList->year!=-1)
    {
        InOrder(BookList->lchild);

        printf("%s\t%s\t%d\n",BookList->book_name,
                BookList->writer, BookList->year);
    }
    InOrder(BookList->rchild);
}


int main()
{
    Book * BOOK=0;
    Book * newBook=0;

    BOOK=InitBiTree();

    newBook = (Book *)malloc(sizeof(Book));
    strcpy(newBook->book_name,"c#程序设计教程");
    strcpy(newBook->writer,"李春葆");
    newBook->year=2010;
    newBook->lchild=0;
    newBook->rchild=0;
    Insert(BOOK, newBook);
    printf("加入一本书以后:\n");
    InOrder(BOOK);
    printf("\n");

    newBook = (Book *)malloc(sizeof(Book));
    strcpy(newBook->book_name,"实用数据结构");
    strcpy(newBook->writer,"陈明");
    newBook->year=2009;
    newBook->lchild=0;
    newBook->rchild=0;
    Insert(BOOK, newBook);
    printf("加入一本书以后:\n");
    InOrder(BOOK);

    printf("\n");
    newBook = (Book *)malloc(sizeof(Book));
    strcpy(newBook->book_name,"应用数学");
    strcpy(newBook->writer,"吴静");
    newBook->year=2011;
    newBook->lchild=0;
    newBook->rchild=0;
    Insert(BOOK, newBook);
    printf("加入一本书以后:\n");
    InOrder(BOOK);
    printf("\n");

    newBook = (Book *)malloc(sizeof(Book));
    strcpy(newBook->book_name,"职业生涯规划");
    strcpy(newBook->writer,"谢彩英");
    newBook->year=2011;
    newBook->lchild=0;
    newBook->rchild=0;
    Insert(BOOK, newBook);
    printf("加入一本书以后:\n");
    printf("书名\t\t作者\t出版年份\n");
    InOrder(BOOK);
    getch();
}
求解

[ 本帖最后由 lxh30907 于 2011-5-15 10:51 编辑 ]
搜索更多相关主题的帖子: return 二叉树 
2011-05-15 10:13
lxh30907
Rank: 1
等 级:新手上路
帖 子:22
专家分:9
注 册:2010-12-15
收藏
得分:0 
没人知道?
2011-05-15 21:02
baobaoisme
Rank: 7Rank: 7Rank: 7
来 自:AVATAR
等 级:黑侠
帖 子:260
专家分:506
注 册:2010-7-9
收藏
得分:0 
要问什么?
2011-05-15 21:16
lxh30907
Rank: 1
等 级:新手上路
帖 子:22
专家分:9
注 册:2010-12-15
收藏
得分:0 
回复 3楼 baobaoisme
if (strcmp(BookList->book_name,newBook->book_name)>0)  
在这里把 > 改成 < 就无显示了
   
2011-05-15 21:58
baobaoisme
Rank: 7Rank: 7Rank: 7
来 自:AVATAR
等 级:黑侠
帖 子:260
专家分:506
注 册:2010-7-9
收藏
得分:10 
粗略看了一下,首先说你的根节点问题,根结点的数据为空,那么所有数据都肯定是大于根节点的,这样最后所有数据在一边,建议根节点赋第一本书的值,这样有利于比较
另外一个就是另外一个问题,就是这个遍历----void InOrder(Book * BookList),遍历条件不合理,只能访问根节点的右子树,无法访问根节点的左子树

你的输出的问题主要是改了符号后全部在另外一个子树上,而遍历只遍历根结点的右子树,故无法输出

你自己再仔细看看吧,感觉程序设计不太合理


[ 本帖最后由 baobaoisme 于 2011-5-15 23:16 编辑 ]
2011-05-15 22:46
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
strcmp就是按字典排序

                                         
===========深入<----------------->浅出============
2011-05-16 10:19
快速回复:strcmp函数的用法问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017258 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved