我已经在这个项目上工作了一天以上,我真的很困惑。我祈祷有人帮助解决这个问题。我在使用函数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.
}
答案 0 :(得分:0)
您的代码中似乎没有任何内容可以设置列表节点的Next
字段。
答案 1 :(得分: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;
}