| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1720 人关注过本帖, 1 人收藏
标题:二叉树实现单词统计分享
取消只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏(1)
已结贴  问题点数:20 回复次数:2 
二叉树实现单词统计分享
当初递归理解不是很清楚,又从新去回忆了下递归,导致这个程序理解花了太长时间了。代码虽然短小,里面要学的东西不少,要加油咯。

binary_tree.cpp:
程序代码:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

#define MAXWORD    100

struct tnode
{
    char *word;
    int count;
    struct tnode *left;
    struct tnode *right;
};

struct tnode *addtree(struct tnode*, char *);
struct tnode *talloc();
char *strdup1(char *);
void treeprint(struct tnode*);
int getword(char *, int);

int main()
{
    struct tnode *root;
    char word[MAXWORD];

    root = NULL;
    while (getword(word, MAXWORD) != EOF)
        if (isalpha(*word))
            root = addtree(root, word);
    treeprint(root);
    return 0;
    
}

struct tnode *addtree(struct tnode *p, char *w)
{
    int cond;

    if (p == NULL)
    {
        p = talloc();
        p->word = strdup1(w);
        p->count = 1;
        p->left = p->right = NULL;
    }
    else if (!(cond = strcmp(p->word, w)))
        p->count++;
    else if (cond < 0)
        p->left = addtree(p->left, w);
    else
        p->right = addtree(p->right, w);
    return p;
}

struct tnode *talloc()
{
    return (struct tnode *)malloc(sizeof(struct tnode));
}

char *strdup1(char *s)
{
    char *p;

    p = (char *)malloc(strlen(s) + 1);
    if(p != NULL)
    strcpy(p, s);
    return p;
}

void treeprint(struct tnode *p)
{
    if (p != NULL) {
        treeprint(p->left);
        printf("%4d %s\n", p->count, p->word);
        treeprint(p->right);
    }
}


getword.cpp:
程序代码:
#include <ctype.h>
#include <stdio.h>

int getword(char *word, int lim)
{
    int c, getch();
    void ungetch(int);
    char *w = word;

    while (isspace(c = getch()))
        ;
    if (c != EOF)
        *w++ = c;
    if (!isalpha(c)) {
        *w = '\0';
        return c;
    }
    for (; --lim; w++)
        if (!isalnum(*w = getch()))
        {
            break;
        }
    *w = '\0';
    return word[0];
}


getch.cpp:
程序代码:
#include<stdio.h>

#define BUFSIZE 100

char buf[BUFSIZE];
int bufp = 0;

int getch()
{
    return (bufp > 0) ? buf[--bufp] : getchar();
}

void ungetch(int c)
{
    if (bufp >= BUFSIZE)
        printf("ungetch: too many charaters\n");
    else
        buf[bufp++] = c;
}
收到的鲜花
  • 九转星河2017-05-18 12:08 送鲜花  10朵   附言:选材好~
搜索更多相关主题的帖子: 二叉树 单词 统计 
2017-05-18 12:00
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 3楼 renkejun1942
我现在没时间去做练习题。现在主要是理解程序的结构和算法。争取20天把后面三章理解。就是这么急。。。。

[此贴子已经被作者于2017-5-18 12:18编辑过]

2017-05-18 12:17
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 5楼 九转星河
我那个擦。我还有20天毕业。现在连个新手都不是。我们专科只有java 没有c  唉。不知道拿什么拯救了。数据结构这东西我先放着,把k&r的基础都理解在系统学习
2017-05-18 12:31
快速回复:二叉树实现单词统计分享
数据加载中...
 
   



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

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