将数组存储为C中的链表

时间:2014-03-29 02:17:25

标签: c arrays string linked-list nodes

我在C工作并遇到麻烦。我需要在链表中存储一个字符数组(字符串)。换句话说,将字符串转换为链接列表。基本上,每个节点一个字符。例如string,dog \ 0,而不是在最后一个节点中存储一个空字符,它只会指向一个空指针来表示字符串的结尾...... d-> o-> g-> NULL

建议会很棒,谢谢

int main(){
    char *string;
    string = malloc(sizeof(char)*100);
    strcpy(string,"cheese");

    node *list = NULL;
    list = createNode(string[0]);

    int i;
    for(i=1;i<strlen(string);i++){
        // this is where I'm stuck, the first char 'c'is in,
        // I'm guessing i wanna loop through and
        // store each char in a new node ? 
    }

    return 0;
}

node *createNode(char data){
    node *ptr = malloc(sizeof(node));

    if (ptr == NULL)
    {
        return NULL;
    }

    ptr->data = data;
    ptr->next = NULL;

    return ptr;
}

2 个答案:

答案 0 :(得分:0)

如果C ++没问题,那么这是一个工作样本:

#include <iostream>
#include <list>
using namespace std;

int main() {
    char str[]="cheese", chr;

    // Store the string in the list
    std::list<char> clist;
    for (int i=0, len=strlen(str); i<len; i++)
        clist.push_back(str[i]);
    clist.push_back('\0');

    // Display the list
    do {
        chr=clist.front();
        cout<<chr<<endl;
        clist.pop_front();
    } while(chr);

    _getwch();
    return 0;
}

答案 1 :(得分:0)

以下是如何在C中执行此操作:

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

struct node {
    node *next;
    char data;
};

node *createNode(char data, node *parent) {
    node *ptr=(node*)malloc(sizeof(node));
    if(ptr==NULL) {
        fprintf(stderr, "Memory allocation error.\n");
        exit(1);
    }
    if(parent!=NULL) parent->next=ptr;
    ptr->data=data;
    ptr->next=NULL;
    return ptr;
}

int main() {
    char str[]="cheese";

    // Store the string to the list
    node *first=NULL, *cur=NULL;
    for(int i=0, len=strlen(str); i<len; i++) {
        cur=createNode(str[i],cur);
        if(first==NULL) first=cur;
    }

    // Now print it out
    cur=first;
    while(cur!=NULL) {
        printf("%c\n", cur->data);
        cur=cur->next;
    }

    _getwch();
    return 0;
}