在C语言中将数组存储为链表



我在C工作,我遇到了一些麻烦。我需要在链表中存储一个字符数组(字符串)。换句话说,将字符串转换为链表。基本上,每个节点一个字符。例如string, dog,而不是在最后一个节点中存储一个空字符它只指向一个空指针来表示字符串的结束...... 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;
}

下面是如何在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("%cn", cur->data);
        cur=cur->next;
    }
    _getwch();
    return 0;
}

如果c++是OK的,那么这里是一个工作示例:

#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('');
    // Display the list
    do {
        chr=clist.front();
        cout<<chr<<endl;
        clist.pop_front();
    } while(chr);
    _getwch();
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新