| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1002 人关注过本帖
标题:一个简单的数据结构问题 代码已写好 有点小问题 希望大佬帮我看下
只看楼主 加入收藏
数据结构难学
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-9-22
收藏
 问题点数:0 回复次数:2 
一个简单的数据结构问题 代码已写好 有点小问题 希望大佬帮我看下
要求:键盘输入英语单词的个数n及n个单词,编一程序,建立一个单向链表,实现:
(1)如果单词重复出现,则只在链表上保留一个。
(2)除满足(1)的要求外。链表结点还应有一个计数域,记录该单词重复出现的次数,然后输出出现次数最多的前k(k<=n,需键盘输入)个单词。


我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node
{
    char word[100];
    int count;
    struct Node *next;
};



struct Node* GetNode()
{
    struct Node* p =  (struct Node*) malloc(sizeof(struct Node));
    p->next = 0;
    p->count = 1;
    memset(p->word, 0, 20);
    return p;
}

void DestroyList(struct Node* head)
{
    struct Node* p = head;
    while (p)
    {
        struct Node* q = p;
        p = p->next;
        free(q);
    }
}

struct Node* InsertNode(struct Node* head, char word[100])
{
    struct Node* p = head;
    while (p)
    {
        if ( strcmp(p->word, word)==0 )
        {
            ++p->count;
            return p;
        }
        p = p->next;
    }
    return p;
}

void DisplayList(struct Node* head)
{
    while(head)
    {
        printf("%s ", head->word);
        head = head->next;
    }
}

void printListByK(struct Node *head, int k) {
    int count = head->count;
    if (k >= count) {
        DisplayList(head);
    } else {
        struct Node *node = head->next;
        for (int i = 0; i < k; i++) {
            printf("word is %s, and count is %d", node->word, node->count);
            node = node->next;
        }
    }
}

int main()
{
    int num = 0;
    scanf("%d", &num);
    struct Node* head = GetNode();
    struct Node* work = head;
    for (int i=0; i<num; i++)
    {
        char word[100] = {0};
        scanf("%s", word);
        if ( InsertNode(head, word)==NULL )
        {
            struct Node* p = GetNode();
            strcpy(p->word, word);
            work->next = p;
            work = work->next;
        }
    }
    int k = 0;
    while(k<=0||k>num)
    {
        printf("Please input k:");
        scanf("%d",&k);
    }
    printListByK(head,k);
    DisplayList(head->next);
    DestroyList(head);
    return 0;
}



最后的运行结果无法满足要求2.。。 求大佬帮助一下

搜索更多相关主题的帖子: struct Node word next head 
2018-09-22 11:34
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
前面没看出哪里不对
估计是 输出出现次数最多的前k(k<=n,需键盘输入)个单词 这里不对
STL 里的 forward_list 的排序是额外写的
所以对于单链表的排序你也要额外写一个函数才行
2018-09-23 10:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
你同一个问题,既在C板块贴,又在C++板块贴。
C 和 C++ 是两门不同的编程语言。

2018-09-25 08:51
快速回复:一个简单的数据结构问题 代码已写好 有点小问题 希望大佬帮我看下
数据加载中...
 
   



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

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