2012-07-14 63 views
-1

我一直在這個項目上工作了一天,我真的很困惑。我祈禱有人幫助解決這個問題。我在功能insertItemList中遇到問題。我不知道如何將測試文件中的String轉換爲linked list。這是一項功課。這個項目比這個要大得多,但我把它簡化成我需要幫助的東西。有人知道我在做什麼錯嗎?關於將字符串插入鏈接列表非常困惑

List.h

 #ifndef _list_h 
     #define _list_h 

     /* 
     * Defines a single list item. 
     */ 

     typedef char *ListItemT; 

     /* 
     * Defines ListP to be a POINTER to a list struct. 
     * (Define the list struct in the (.c) file. 
     */ 

     typedef struct ListT *ListP; 

     /* 
     * Returns a pointer to a new empty list. 
     * You may implement this list as a singly or doubly 
     * linked list. 
     */ 

     ListP newList(); 

     /* 
     * Creates a new node, inserts the item into the 
     * new node and inserts the new node into the list 
     * after the current node. 
     * Current in then moved to the newly inserted node. 
     * NOTE: Impossible to insert at head of list. 
     */ 

     void insertItemList(ListP, ListItemT); 

     #endif 

List.c

 #include <stdio.h> 
     #include <stdlib.h> 
     #include <string.h> 
     #include "List.h" 


     struct ListT 
     { 
     char INFO[20]; 
     struct ListT *Next; 
     }*Head; 



     /* 
     * Returns a pointer to a new empty list. 
     * You may implement this list as a singly or doubly 
     * linked list. 
     */ 

     ListP newList() 

     { 
     // allocate memory for new list 

     struct ListT *newnode = malloc(sizeof(struct ListT)); 

     return newnode; 
     } 

     /* 
     * Creates a new node, inserts the item into the 
     * new node and inserts the new node into the list 
     * after the current node. 
     * Current in then moved to the newly inserted node. 
     * NOTE: Impossible to insert at head of list. 
     */ 

     //where I'm having trouble 

    void insertItemList(ListP LOC, ListItemT DATA) 

    { 
    struct ListT *temp; 

    temp=(struct ListT *)malloc(sizeof(struct ListT)); 

    strcpy(temp->INFO, DATA); 
    } 

ListTest.c

 #include <stdio.h> 
    #include <string.h> 
    #include "List.h" 

    int main() 
    { 
    // Create two lists 
    ListP list1 = newList(); 
    ListP list2 = newList(); 
    printf("\nList Creation Successful!\n"); 

    // Insert one name into the first list 
    insertItemList(list1, "Alice"); //Ive never seen a parameter like this before. 
    } 
+2

什麼** **特別是你的問題? – templatetypedef 2012-07-14 19:30:13

回答

0

似乎沒有在你的代碼的任何設置Next場的列表節點。

0

List.c

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "List.h" 

struct ListT { struct ListNodeT *head, *current; }; 
struct ListNodeT 
{ 
    char INFO[20]; 
    struct ListNodeT *Next; 
}; 

/* 
* Returns a pointer to a new empty list. 
* You may implement this list as a singly or doubly 
* linked list. 
*/ 
ListP newList() 
{ 
    // allocate memory for new list 
    struct ListT *newlist = malloc(sizeof(struct ListT)); 
    if (newlist) newlist->head = newlist->current = NULL; 
    return newlist; 
} 

/* 
* Creates a new node, inserts the item into the 
* new node and inserts the new node into the list 
* after the current node. 
* Current is then moved to the newly inserted node. 
* NOTE: Impossible to insert at head of list. 
*/ 
void insertItemList(ListP LOC, ListItemT DATA) 
{ 
    struct ListNodeT *temp = malloc(sizeof(struct ListNodeT)); 
    if (!temp) abort(); 
    strncpy(temp->INFO, DATA, sizeof temp->INFO); 
    if (LOC->current) 
     temp->Next = LOC->current->Next, 
     LOC->current->Next = temp; 
    else 
     temp->Next = NULL, 
     LOC->head = temp; 
    LOC->current = temp; 
}