나는 만들고있는 작은 게임을 위해 이중 링크 된 순환 목록을 만들고 싶습니다. 나는 그것이 새로운 요소를 추가하고 삭제할 때 제공하는 속도 때문에 그것을 목록으로 원한다. 역동적 인 테이블을 사용하고 싶다면 어떤 종류의 추가/삭제 작업을해도 전체 테이블을 다시 작성해야하고 프로그램이 심각하게 느려질 것입니다. 나는 사용자가 할 수 있도록하려면 무엇더블 링크 된 순환 목록 C++
struct parts{
char name;
parts *next, *prev;
parts *connected;
};
void add_part(struct parts **head, struct parts **tail, char name)
{
struct parts *a;
a = (struct parts*)malloc(sizeof(struct parts));
a->name = name;
if ((*head) == NULL && (*tail) == NULL)
{
*head = a;
*tail = a;
a->next = NULL;
a->prev = NULL;
}
else
{
a->next = *head;
a->prev = NULL;
}
}
void display(parts *head) {
parts *temp = head;
while (temp != NULL){
cout << temp->name << endl;
temp = temp->next;
}
}
int main()
{
char names[] = "ABCDEFGHIJKLMNOPRSTUWXYZ";
segmenty *head = NULL;
segmenty *tail = NULL;
int count_parts;
cin >>count_parts;
for (int i=0; i < count_parts && i<24; i++){
add_part(&head, &tail, names[i]);
}
display(head);
return 0;
}
그가 원하는 요소의 양을 입력하는 것입니다), 해당 솔루션에 대한 유일한 문제는 내가 완전히 같은 목록을 수행하는 방법을 이해하지 못하고 있다는 사실이다 그리고 나서 각 요소의 이름을 알파벳의 문자로 지정하고 목록에 넣으므로 모든 요소가 전후 요소에 연결되고 꼬리가 머리에 연결됩니다 (목록이 주기적 이길 원합니다). 안타깝게도 내 포인터 기술이 부족합니다 ... * connected는 새로운 요소를 삭제하거나 추가하는 등의 용도로 현재 지상에있는 요소 (단 하나의 요소 만 한 번에지면에 닿을 수 있음)에 사용하려는 포인터입니다. 요소가 함정에 부딪치게되면 그 특정 요소를 삭제하려고합니다. 다른 요소는 삭제하지 않습니다.
를 당신이 읽을 것을 권장합니다 : 예를 들어, 다음 코드 조각입니다 http://en.wikipedia.org/wiki/Doubly_linked_list (특히 "순환 이중 연결 목록"섹션). 또한 분리 된 머리를 사용하는 것이 좋습니다 (즉, 첫 번째 요소를 머리로 사용하지 마십시오). 순환 이중 연결 목록을 만들기 전에 이미 간단한 목록을 만들었습니까? – Biduleohm
전에는 그런 짓을하지 않았습니다. 완전히 새로운 개념입니다. – user3026386
이 코드는 C ('malloc'과'struct parts')와 C++ ('cin'과'cout'과 함께)의 혼합으로 보입니다. 나는'malloc'을 없애고 대신에 C++의 기능을 사용하는 것을 권장합니다. – Edward