将数组复制到每个数据字段中的链接列表

时间:2018-12-17 10:54:40

标签: c arrays linked-list character singly-linked-list

首先,对不起,如果我的问题已得到回答。我发现某些线程(在某种程度上)相似,但无法解决我的问题。 其次,我是C语言中的单链接列表的新手,所以如果您能尽可能轻松地回答我的问题,我将很高兴。

我制作了一个简单的链接列表,其中包含字符:

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

// declaration of node
struct _Node_ 
{
char data_string;
struct _Node_ *next;
};
int main() {
//a simple linked list with 3 Nodes, Create Nodes
struct _Node_* head = NULL; 
struct _Node_* second = NULL; 
struct _Node_* third = NULL;

//allocate 3 Nodes in the heap
head = (struct _Node_*)malloc(sizeof(struct _Node_));  
second = (struct _Node_*)malloc(sizeof(struct _Node_)); 
third = (struct _Node_*)malloc(sizeof(struct _Node_)); 

// assign data for head
head->data_string = 'H';      //assign value according struct
head->next = second;          //points to the next node

// assign data for second
second->data_string = 'E';
second->next = third;

third->data_string = 'Y';
third->next = NULL;

return 0;
}

链接列表现在看起来像这样:

 /* Linked list _Node_

       head         second           third
         |            |                |
         |            |                |
    +---+---+     +---+---+       +----+------+ 
    | 1 | o-----> |  2| o-------> |  3 | NULL | 
    +---+---+     +---+---+       +----+------+        

  */

假设我有3个数组,分别是:

char name1[] = "Joe";
char name2[] = "Eve";
char name3[] = "Brad"; 

我的目标是将此数组复制到每个数据字段中,因此结果如下:

 /* Linked list _Node_

       head            second              third
         |               |                   |
         |               |                   |
    +-----+---+     +-------+---+     +-------+------+ 
    | Joe | o-----> |  Eve  | o-----> |  Brad | NULL | 
    +-----+---+     +-------+---+     +-------+------+        

  */

我该如何实现?我已经尝试添加/更改以下内容:

...

struct _Node_ 
{
char data_string[8];
struct _Node_ *next;
};    

...

...

char name1[] = "Joe";
char name2[] = "Eve";
char name3[] = "Brad";

// assign data for head
head->data_string = name1;      //assign value according struct
head->next = second;          //points to the next node

// assign data for second
second->data_string = name2;
second->next = third;

third->data_string = name3;
third->next = NULL;

...

但是编译后我得到的是:

stack_overflow.c:27:23: error: array type 'char [8]' is not assignable
head->data_string = name1;      //assign value according struct
~~~~~~~~~~~~~~~~~ ^
stack_overflow.c:31:25: error: array type 'char [8]' is not assignable
second->data_string = name2;
~~~~~~~~~~~~~~~~~~~ ^
stack_overflow.c:34:24: error: array type 'char [8]' is not assignable
third->data_string = name3;
~~~~~~~~~~~~~~~~~~ ^
3 errors generated.

也许有人可以帮忙,感谢您的帮助。 再次,抱歉,如果这是重复的,但是我无法用其他线程解决。.

1 个答案:

答案 0 :(得分:2)

您要求提供一个代码示例:

<div class="featured-image">
  <div class="overlay">
    <img src="https://img.freepik.com/free-vector/abstract-low-poly-design-background_1048-8196.jpg?size=338c&ext=jpg">
  </div>
</div>

注意:

  • 您将字符串1的内存分配的长度超过了长度,因为C中的字符串具有空终止符。

  • 不要在标识符名称前使用下划线-底线是为编译器保留的。

  • 不强制转换struct Node { char *data_string; struct Node *next; }; struct Node *newNode (char *s) { struct Node *node; if (!s) return 0; // error: no string if (!(node= malloc(sizeof(struct Node)))) return 0; // no more memory node->data_string= malloc(strlen(s)+1); if (!node->data_string) { free(node); return 0; } strcpy(node->data_string,s); node->next= 0; return(node); } void freeNode(struct Node *node) { if (!node) return; if (node->data_string) free(node->data_string); free(node); } 的结果。它返回malloc指针,该指针与任何指针类型兼容。

  • 此示例包括所有必需的错误检查。