經過數小時的瘋狂和思考,我正在寫這篇文章。可能這是你今天要讀的最愚蠢的練習,但對我來說,經過幾個小時的練習,不是那樣的。
回到問題。我的教授要求在鏈表中分配一個動態陣列。這一點并不難。我撰寫了結構并定義了兩種型別。下一步是撰寫2個函式:
- 第一個,稱為 init,創建串列的新元素,使用 n 整數分配陣列,并將其回傳給主;
- 一個列印函式,用于顯示陣列內部的內容。
代碼看起來像這樣。
#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”回傳給 main 會讓我陷入困境。在這一點上,我想我搞砸了很多事情。該演算法在第二次列印時進入回圈。第一個陣列的列印沒有問題,但第二個陣列的列印……狗屎……(我知道我實際上不列印陣列。我列印陣列的大小只是為了讓它現在更具可讀性) .
我認為我的錯誤與“init”函式有關。出了點問題,我不明白在哪里。我希望有人可以幫助甚至向我建議對該程式的一些修復。
當我等待有人閱讀這篇文章時,我會嘗試將我的程式正在做的事情寫在紙上。
感謝您的關注,祝您有美好的一天。
uj5u.com熱心網友回復:
該函式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;
}
并且函式print_list應該輸出內部陣列的元素。例如
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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416400.html
標籤:
