2012-04-18 2 views
-1

기본적으로 사용자 입력시 배열을 초기화해야합니다. input = 3 경우 해당 그래서 당신은 집에서 일을 말할 수 ...이 배열은 각각 인덱스 0,1,2에 (그래서 총 3 개 목록)C에서 연결된 목록 노드의 동적 배열을 만드는 방법은 무엇입니까?

int input = 3; 
list* array[n]//not allowed as n is not constant, also not in heap so can't pass it across functions 
list* array[] = (list*) malloc(sizeof(list)*input)//compiler error 

인터뷰 준비를 하나의 연결리스트를 저장할 수 있다는 것을 의미합니다!

+0

질문과 코드는 서로 모순됩니다. 당신은 일련의 목록이나 일련의 목록 노드를 동적으로 할당하고 싶습니까? – Christoffer

+0

연결된 목록의 배열 .... 그래서 array [0]에 listA가 있고 array [1]이 listB를 가리 킵니다. 즉, 배열의 배열 대신, 나는 연결된 목록의 배열을 원한다. 그러나 배열의 크기는 사용자의 입력에 따라 결정되어야합니다. –

답변

0

list* array = malloc(sizeof(list) * input)이어야하며 malloc은 새로 할당 된 메모리 위치의 기본 주소를 반환합니다. 배열로 사용하면 array[0]..array[input - 1]에 액세스 할 수 있습니다.

+0

그러나 배열은 실제로 할당 된 많은 메모리가있는 연결 목록 일뿐입니다. 어떻게 현명한 색인에 액세스 할 수 있습니까? –

+0

오, 오케이 ..이 코드를 사용해보십시오! –

0

(단일) 연결 목록은 종종 다음 구조에 대한 포인터가있는 구조입니다. 이 패턴을 사용하면 목록에서 추가, 삭제 및 삽입하기가 쉬우 며 실행시 전체 데이터 사용을 유연하게 관리 할 수 ​​있습니다.

상황에서 링크 된 목록은 다음 각 목록의 트랙을 유지하기위한 기능을 추가 할 수 있습니다이

struct List 
{ 
// contents of the list 
List* Pointer_to_next_list; 
}; 

처럼 보일 것입니다. 이 방법에 대해 Wikipedia::Linked List을 읽어 보시기 바랍니다.

1

연결된 목록의 배열은 머리글 노드의 배열 (표준 연결 목록 구현을 가정) 또는 목록에 대한 포인터의 배열 일 수 있습니다. 두 경우 모두, 직면하게 보이는 문제는 배열을 동적으로 할당하는 방법입니다.

동적으로 힙에 배열을 할당하기위한 일반 구문은 코드에서 컴파일 오류 따라서

int input = 3; 
list ** array = calloc(input, sizeof(list*)); 

이것이 당신이 찾고있는 무엇인가를 것 수정

type * array = calloc(number_of_elements, sizeof(type)) 

입니까?

관련 문제