2013-10-12 6 views
0

최대 50 개의 연결된 목록이있는 프로그램을 만들어야합니다. 기본적으로 내 프로그램은 일부 메시지를 생성하고 내 문자열 앞에 오는 표시기를 기반으로 오른쪽 링크 된 목록에 메시지를 넣어야합니다.1 개 이상의 연결된 목록 - 요소 추가

충분히 명확한 지 모르겠지만 내 코드의 일부 (중요한 부분)를 표시하려고합니다. 내가 링크 된 목록으로 (상단) 새로운 요소를 추가하기 위해 만든 기능은 다음과 같습니다

void InsertLL (News p, char M[]) { 
    char * text = malloc(strlen(M)+1); 
    strcpy(text, M); 
    News s,t; 
    t = malloc(sizeof(struct List)); 
    t-> Text = text; 
    s = p; 
    p = t; 
    p-> next = s; 
} 

내 구조체 목록 (내리스트의 요소의 형태)는 문자 포인터 (라는 텍스트)를 포함 목록의 다음 요소에 대한 포인터.

내 프로그램을 시뮬레이트 할 때 포인터가 포인터 p [0]에 의해 가리키는 연결 목록에 넣어야하는 메시지를 수신했다고 가정합니다. 그래서 새로운 요소를 만듭니다 (목록이 비어있는 경우를 잊어 버렸습니다. 이미 작성했습니다). 그리고 제가 보여준 함수를 사용하여 목록의 맨 위에 추가하십시오. 이제 다음 포인터 p [1]에 넣어야하는 다른 메시지를 받았습니다. p [0] -> Text를 인쇄하면 p [1] -> Text라는 텍스트가 나옵니다.

즉, p [i]가 가리키는 목록에 새 요소를 추가하면 이전의 모든 texts p[i] -> Texts이이 새 요소의 새 텍스트를 가져옵니다. 내가 뭘 잘못하고 있는지 전혀 모르겠다.

더 많은 정보가 필요하면 도움이 될지 모르겠다.

+0

이 사실 나는 그게 이해하지 않았다이다 진짜 문제. – ST3

+0

의도는 "스택과 같은"목록 (새 요소가 항상 앞에 표시) 또는 "대기열 같은"목록 (새 요소가 항상 끝에 추가되고 앞은 첫 번째 삽입에만 설정 됨))? 알고리즘에 큰 차이가 있습니다. 여기에 최소한 가지고 계신 것은 스택처럼 보이지만 그것이 당신이 원하는 것이라고는 생각하지 않습니다. – WhozCraig

답변

1

코드 문제는 노드 목록을 유지 관리하지 않는다는 것입니다. 동일한 노드를 반복해서 덮어 쓰고 있습니다.

너 한테 :

  1. 어떤 노드가 다음 하나를 작성하지 않는 경우.

  2. 노드가있는 경우 끝 노드로 이동하십시오 (더 빨리 액세스하려면 꼬리 포인터를 사용할 수 있음).

  3. 끝에 노드를 추가하십시오.

만들기 노드 :

  • 는 노드 유형 포인터를 선언합니다.

  • 메모리를 할당하십시오.

  • 노드의 내용을 업데이트하십시오.

  • 노드의 다음 포인터를 null로 설정하십시오.

  • 이 노드를 목록의 끝에 추가하십시오.

ex. 노드 1과 노드 2의리스트에 노드 3을 삽입한다.

Link list demo

이것은 일반적으로 당신은 두 번 나를 만든이 데모를 확인할 수 있습니다

typedef struct node{ 
    int val; //you can use your text here 
    struct node* next; 
    }NODE; 

struct node* head=0; 

int addNode(int v){ 
    if(head==0){        //checking for empty node. 
     struct node* n=malloc(sizeof(NODE)); 
     n->val=v; 
     head=n; 
    } 
    else{ 
     struct node* temp=head; 
     while(temp->next != 0) //Navigating till end 
     { 
      temp=temp->next; 
     } 
     struct node* n=malloc(sizeof(NODE)); //allocating memory 
     n->val=v;   //you need to use strcpy for string here.       
     temp->next=n;  //adjusting pointers 
     n->next=0; 
    } 
} 

를 사용할 수있는 방법 링크 된 목록 http://ideone.com/s6TtUX

+0

왜 내 기능이 전혀 작동하지 않는지 알 수 없습니다. – Giiovanna

+0

@ user2768645 구조체를 보여주십시오. – Arpit

+0

구조체 목록 { char * Text; 뉴스 다음; }; 뉴스는 struct List *입니다. – Giiovanna

관련 문제