【问题标题】:Linked list/Strings/Pointers in CC中的链表/字符串/指针
【发布时间】:2021-01-17 16:50:15
【问题描述】:

我是一个新手,正在尝试学习 C,但在实现链表中的字符串和指针时遇到了一些问题。我被要求使用链表构建预购树,结果出现了一个问题。

顺便说一句,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
struct BinTreeNode {
    char *data ;
    struct BinTreeNode *left;
    struct BinTreeNode *right;
};

struct BinTreeNode *initBinTreeNode(char *data);

void visit(char *data);

void preorder(struct BinTreeNode *node);
void postorder(struct BinTreeNode *node);
void inorder(struct BinTreeNode *node);

int main(void)
{
    struct BinTreeNode *root, *parent1, *parent2;
  /* growing the tree */
    root = initBinTreeNode("5");
    root->left  = initBinTreeNode("Mee (F) & Keong (M)");
    root->right = initBinTreeNode("Saw (F)");
    parent1 = root->left;
    parent1->left  = initBinTreeNode("Min (F) & Heng (M)");
    parent1->right = initBinTreeNode("Ning (F)");
    parent2 = parent1->left;
    parent2->left  = initBinTreeNode("Rui (F)");
  /* traverse and print tree */
    printf("\nPreorder traversal:\t");  preorder(root);
    
    return(0);
}

void preorder(struct BinTreeNode *node)
{
    if (node){  /* if Node exists */
        visit(node->data);
        preorder(node->left);
        preorder(node->right);
    }
}

void visit(char *data)
{
    printf("%c -", *data);
}

struct BinTreeNode *initBinTreeNode(char *data)
{
    struct BinTreeNode *temp;
    temp = malloc(sizeof(struct BinTreeNode));
    if (temp == NULL)
    {
        printf ("Memory allocation failed.");
        return NULL;
    }

    (*temp).data = data;
    (*temp).left = NULL;  
    (*temp).right = NULL;   
    return (temp);          
}

当我有 {"5"},{"Mee (F) & Keong (M)"},{"Saw (F)"},{"Min (F) & Heng (M)"},{ "Ning(F)"},{"Rui(F)"} 在我的列表中,只有第一个单词是这样打印出来的:

Preorder traversal:     5 -M -M -R -N -S -

我想要的预购输出应该是:

Preorder traversal:     5 -Mee (F) & Keong (M) -Min (F) & Heng (M) -Rui (F) -Ning (F) -Saw (F) -

我可以知道,我错过了什么吗?如果您能提供任何帮助和建议,我将不胜感激!

【问题讨论】:

  • 欢迎来到 Stack Overflow。编写代码时,明智的做法是尽可能独立开发新功能,并使其完美运行,然后再将其引入整体。如果您在第一次编写 visit 时测试过它,您会注意到错误,并且知道该错误在该函数中。

标签: c linked-list


【解决方案1】:

换行(%c - 打印单个字符,在本例中为数据的第一个字符):

printf("%c -", *data);

收件人(%s - 打印整个字符串):

printf("%s -", data);

【讨论】:

  • !!!!哇,这真的有助于解决这个困扰我几个小时的问题!非常感谢!只是另一个小要求,您能解释一下有关更改的内容吗?
  • @youyiheng72 当这个答案解决了你的问题,考虑accepting吧。
猜你喜欢
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
相关资源
最近更新 更多