C中链表内的动态数组



经过数小时的疯狂思考,我写了这篇文章。这可能是你今天要读的最愚蠢的练习,但对我来说,经过几个小时的练习,情况并非如此。

回到问题上来。我的教授要求在链表中分配一个动态数组。这一点并不难。我写了结构并定义了两种类型。下一步是编写2个函数:

  1. 第一个名为init的元素创建列表的一个新元素,使用n整数分配数组,并将其返回给main
  2. 一个打印函数,用于显示数组内部的内容

代码看起来是这样的。

#include <stdio.h>
#include <stdlib.h>
struct elements{
int  *array;
int size;
struct elements* next; 
};
typedef struct elements elementOfList; 
typedef elementOfList* ListOfElements;
ListOfElements init(int n){
ListOfElements new;
new->array = malloc(sizeof(int)*n);
for(int i = 0; i < n; i++)  new->array[i] = 0;
new->size = n;
new->next = NULL;
return new;
}
void print_list(ListOfElements list){
if(list == NULL) return;
printf("%d",list->size);
print_list(list->next);
}
int main(){
ListOfElements list = init(4);
print_list(list);
// -> n = 4 | 0, 0, 0, 0,
list->next = init(12);
print_list(list);
// -> n = 4 | 0, 0, 0, 0,
// -> n = 12 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, %
return 0;
}

正如你所看到的,返回一个";listOfElements";总的来说,这让我做了一场灾难。在这一点上,我想我把很多事情都搞砸了。算法在第二次打印时进入循环。打印第一个阵列没有问题,但打印第二个阵列。。。。妈的。。。(我知道我实际上没有打印数组。我打印数组的大小只是为了让它现在更可读(。

我认为我的错误与";init";作用出了问题,我不明白哪里出了问题。我希望有人能帮助我,甚至建议我对程序进行一些修复。

当我等待有人阅读这篇文章时,我会试着把我的程序在做什么写在纸上。

感谢您的关注,祝您今天愉快。

函数init应分配类型为elementOfList的对象

ListOfElements init(int n)
{
ListOfElements new = malloc( sizeof( *new ) );

if ( new != NULL )
{
new->array = malloc( n * sizeof( int ) );
if ( new->array == NULL ) n = 0;
new->size = n;
for ( int i = 0; i < n; i++ )  new->array[i] = 0;
// or you can use memset instead of the for loop
new->next = NULL;   
}
return new;
}

并且函数CCD_ 3应当输出内部阵列的元素。例如

void print_list(ListOfElements list)
{
if ( list != NULL )
{
printf("-> %d | ",list->size);

for ( int i = 0; i < list->size; i++ )
{
if ( i != 0 ) printf( ", " ); 
printf( "%d", list->array[i] );
}
putchar( 'n' );
print_list(list->next);
}
}

最新更新