好的,我已经更新了我的代码了。我遇到了一个新问题,但似乎正在走上正确的道路。现在,当我输入数字时,它会不断吐出我输入的第一个数字而不是移动到下一个数字。
的main.c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <cType.h>
#include "list.h"
#define amount 3
//Prototypes
void printList(LIST* number);
int main(){
int i;
int* dataPtr;
int number;
LIST* numberList;
numberList = createList();
printf("Please enter %d numbers for the linked list\n", amount);
for(i = 0; i < amount; i++){
printf("#%d: ", i+1);
scanf("%d", &number);
dataPtr = malloc(sizeof(int));
*dataPtr = number;
addNode(numberList, dataPtr);
}
printList(numberList);
system("PAUSE");
return 0;
}
void printList(LIST* number){
int* dataPtr;
while (!emptyList(number)){
traverse(number,0, (void*)&dataPtr);
printf("%d\n", *dataPtr);
addNode(number, dataPtr);
}
}
list.h
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <cType.h>
//List ADT Type Definitions
typedef struct node{
void* dataPtr;
struct node* link;
} NODE;
typedef struct{
int count;
NODE* pos;
NODE* head;
NODE* rear;
} LIST;
//Prototype Declarations
LIST* ceateList(void);
bool traverse (LIST* pList, int fromWhere, void** dataOutPtr);
int listCount (LIST* pList);
bool emptyList (LIST* pList);
bool fullList (LIST* pList);
bool addNode (LIST* pList, void* dataInPtr);
list.c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <cType.h>
#include "list.h"
LIST* createList(void){
LIST* list;
list = (LIST*) malloc (sizeof(list));
if(list){
list->head = NULL;
list->rear = NULL;
list->count = 0;
}
return list;
}
bool addNode(LIST* pList, void* dataInPtr){
NODE* pNew;
if(!(pNew = (NODE*) malloc(sizeof(NODE))))
return false;
pNew->dataPtr = dataInPtr;
pNew->link = NULL;
if(pList->count == 0){
pNew->link = pList->head;
pList->head = pNew;
if(pList->count == 0)
pList->rear = pNew;
}
else{
pNew->link = pNew;
if(pNew->link == NULL)
pList->rear = pNew;
}
(pList->count)++;
return true;
}
bool emptyList(LIST* pList){
return(pList->count == 0);
}
bool fullList(LIST* pList){
NODE* temp;
if((temp = (NODE*)malloc(sizeof(*(pList->head))))){
free(temp);
return false;
}
return true;
}
int listCount(LIST* pList){
return pList->count;
}
bool traverse(LIST* pList, int fromWhere, void** dataPtrOut){
if(pList->count == 0)
return false;
if(fromWhere == 0){
pList->pos = pList->head;
*dataPtrOut = pList->pos->dataPtr;
return true;
}
else{
if (pList->pos->link == NULL)
return false;
else{
pList->pos = pList->pos->link;
*dataPtrOut = pList->pos->dataPtr;
return true;
}
}
}
答案 0 :(得分:5)
list = (LIST*) malloc (sizeof(list));
你有指针的大小,而不是结构的大小。
答案 1 :(得分:1)
当您致电_insert()
时,您尚未初始化pPre
。在C中,未初始化的内存不是nessescarily NULL
。
此外,如果我是你,我会从pos
类型中删除LIST
指针 - 使用它会使您的代码非常不可重入。
答案 2 :(得分:0)
我认为学习使用调试器是个好主意。它是任何开发技能的重要组成部分。
如果这是在使用gcc的Linux系统上(最有可能),那么使用-g编译代码并使用gdb运行它。如果你需要更多的指导,那么就这么说
PS:我同意早先的海报,你不应该使用全部大写变量名。传统上所有大写字母都用于宏和常量