如何完成“信件”功能? (链接列表)

时间:2019-05-13 11:44:05

标签: c count linked-list char store

我是链接列表的初学者,希望有人帮助我。

家庭作业需要:输入字符串(来自用户),将其存储在链接列表中,并对出现的字母计数。例如:input:hello output:hello h:1 e:1 l:2 o:1。

我现在有下面的代码,我想对“字母”功能有所帮助。谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct charact {
    char ch;
    int occurs;
    struct charact *next;
};

typedef struct charact Char;
typedef Char *ListofChar;
typedef Char *CharNode_ptr;
void letters(char name[50], ListofChar *chars_ptr);
void report(ListofChar chars);
Char *createnode(char ch);

int main() {
    char name[50];
    ListofChar chars = NULL;
    scanf("%s", name);
    letters(name, &chars);
    report(chars);
    return 0;
}

Char *createnode(char ch) {
    CharNode_ptr newnode_ptr ;
    newnode_ptr = malloc(sizeof (Char));
    newnode_ptr -> ch = ch;
    newnode_ptr -> occurs = 0;
    newnode_ptr -> next = NULL;
    return newnode_ptr;
}
/*code*/
void letters(char name[50], ListofChar *lst_ptr) {

    int i;
    Char *temp=NULL;
    Char *p=NULL;
    for(i=0;name[i]!='\0';i++){
        createnode(name[i]);
    }

    return;
}

void report(ListofChar chars) {
    while(chars!=NULL){
        printf("%c",chars->ch);
        chars=chars->next;
}
return;
}

1 个答案:

答案 0 :(得分:1)

对于“ Hel”输入,这大致是您要创建的列表:

+------+
|  H   |
+------+
| next |-+
+------+ |
   ------|
   |
   V
+------+
|  E   |
+------+
| next |-+
+------+ |
   ------|
   |
   V
+------+
|  L   |
+------+
| NULL |
+------+

这是您的代码创建的内容:

+------+
|  H   |
+------+
| NULL |
+------+

+------+
|  E   |
+------+
| NULL |
+------+

+------+
|  L   |
+------+
| NULL |
+------+

您需要将列表中的元素链接在一起。使用此绘图并在Google上进行搜索,您应该可以编写程序。