创建一个链表并实现数据统计。函数WORD *create(char *a[][20],int n) 创建一个包含n个结点的单向链表,结点数据来自a所指向的数组中存储的n个单词(字符串)。 函数void

Posted yanglike111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建一个链表并实现数据统计。函数WORD *create(char *a[][20],int n) 创建一个包含n个结点的单向链表,结点数据来自a所指向的数组中存储的n个单词(字符串)。 函数void相关的知识,希望对你有一定的参考价值。

/*下列程序的功能:创建一个链表并实现数据统计。函数WORD *create(char *a[][20],int n)
创建一个包含n个结点的单向链表,结点数据来自a所指向的数组中存储的n个单词(字符串)。
函数void count(WORD *h)统计h指向的单向链表中不同单词各自出现的次数,将统计结果保存到
局部数组c中并输出。*/
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct w
{
    char word[20];
    struct w *next;
}WORD;
WORD *create(char a[][20],int n)
{
    WORD *p1,*p2,*h=0;
    int i;
    for(i=0;i<n;i++)
    {
        p1=(WORD *)malloc(sizeof(WORD));
        strcpy(p1->word,a[i]);
        if(h==0)
            h=p2=p1;
        else 
        {    p2->next=p1;p2=p1;    }
    }
    p2->next=NULL;
    return h;    
}
void count(WORD *h)
{
    struct {
        char word[20];
        int num;
    }c[10]={0};
    int m=0,i;
    while(h)
    {
        if(m==0)
        {
            strcpy(c[0].word,h->word);
            c[0].num=1;m++;
        }
        else
        {
            for(i=0;i<m;i++)
                if(strcmp(c[i].word,h->word)==0)
                {
                    c[i].num++;
                    break;
                }
            if(i>=m)
            {
                strcpy(c[m].word,h->word);
                c[m].num++;
                m++;
            }
        }
        h=h->next;
    }
    for(i=0;i<m;i++)
        printf("%s:%d ",c[i].word,c[i].num);
}
int main()
{
    char words[10][20]={"red","green","blue","blue","green","blue","black","white","red","pink"};
    WORD *head=0;
    head=create(words,10);
    count(head);
}

运行结果:

以上是关于创建一个链表并实现数据统计。函数WORD *create(char *a[][20],int n) 创建一个包含n个结点的单向链表,结点数据来自a所指向的数组中存储的n个单词(字符串)。 函数void的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现创建一个集合用链表。事先并不知道元素个数。

过滤链表并返回新的链表 C

编写C语言程序创建一个具有10个结点的单链表并输出该链表的数据

定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

1.创建一个链表并输出

剑指 Offer 24. 反转链表