你有最大的問題是與您繼續納入struct
前DoubleLinkedList
typedef,它引起的問題。與DNode
發生同樣的問題。它滲透到代碼中。您需要閱讀typedef struct vs struct definitions就代碼而言,您需要重新訪問所有calloc
調用。這是相當不清楚你要做什麼(是的,我知道你正在分配DoubleLinkedList
或DNode
,但你試圖是不正確的。 。短的方式來顯示比只是提供了一個差異等的變化(與DIFF創建-uNrb)這將讓你開始:
--- DoubleLinkedList.c
+++ DoubleLinkedList.c 2014-06-26 22:59:35.768919428 -0500
@@ -19,13 +19,13 @@
#include "DoubleLinkedList.h"
-typedef struct DNode mainTemp;
-typedef struct DoubleLinkedList mainList;
+DNode mainTemp;
+DoubleLinkedList mainList;
//1 DONE
-DoubleLinkedList* allocDList(uint elementSize){
+DoubleLinkedList* allocDList (uint elementSize) {
- struct DoubleLinkedList* list = &mainList;
+ DoubleLinkedList* list = &mainList;
list->head = NULL;
list->tail = NULL;
@@ -35,18 +35,16 @@
return list;
-
-
}
//2 DONE
void releaseDList(DoubleLinkedList* list){
- struct DNode* node = list->head;
- struct DNode* next = NULL;
+ DNode* node = list->head;
+ DNode* next = NULL;
while(node){
- struct DNode* next = node->next;
+ DNode* next = node->next;
free(node);
node = next;
@@ -56,12 +54,12 @@
//3 DONE
void insertDListElementAt(DoubleLinkedList* list, Object newElement, uint position){
- struct DNode* newNode = calloc(list, sizeOf(newElement));
+ DNode* newNode = calloc (1, sizeof(newNode)); // allocating newNode or list?
newNode->data = newElement;
int counter = 0;
- struct _DNode* current = list->head;
+ DNode* current = list->head;
while(counter < list->length){
@@ -81,7 +79,7 @@
//4 DONE
void appendDList(DoubleLinkedList* list, Object newElement){
- struct DNode* newNode = calloc(list, sizeOf(newElement));
+ DNode* newNode = calloc(1, sizeof(newNode)); // allocating newNode or list?
newNode->data = newElement;
newNode = list->tail->next; // setting newNode as current tail's next
@@ -95,7 +93,7 @@
- struct DNode* newNode = (DNode*)calloc(list, sizeOf(newElement));
+ DNode* newNode = calloc(1, sizeof(newElement));
newNode->data = newElement;
@@ -109,12 +107,12 @@
//6 DONE
DoubleLinkedList* reverseDList(DoubleLinkedList* list){
- struct DoubleLinkedList* newList = NULL;
- newList = (struct DoubleLinkedList*) malloc(sizeOf(DoubleLinkedList));
+ DoubleLinkedList* newList = NULL;
+ newList = malloc(sizeof(DoubleLinkedList));
- struct DNode* temp = NULL;
+ DNode* temp = NULL;
- temp = (DNode*)malloc(sizeOf(DNode));
+ temp = malloc (sizeof (DNode));
temp = list->tail;
@@ -136,9 +134,9 @@
//7 DONE
DoubleLinkedList* halfList(DoubleLinkedList* list){
- struct DNode* slow = list->head;
- struct DNode* fast = list->head;
- struct DoubleLinkedList* newList = malloc(uint);
+ DNode* slow = list->head;
+ DNode* fast = list->head;
+ DoubleLinkedList* newList = malloc (sizeof (uint));
if(list->head != NULL){
@@ -166,7 +164,7 @@
Object removeDList(DoubleLinkedList* list, int position){
int counter = 0;
- struct _DNode* temp = list->head;
+ DNode* temp = list->head;
while(counter < list->length){
@@ -189,11 +187,11 @@
//9 DONE
void printDList(DoubleLinkedList* list){
- struct _DNode* temp = list->head;
+ DNode* temp = list->head;
while(temp->next != NULL){
- printf("%d", temp->data);
+ printf ("%d", temp->data);
temp = temp->next;
}
同樣,除非你有一個巨大的需求包括DoubleLinkedList
和DNode
(含無效數據類型),用一個簡單的列表就可以更好地服務你正在做的是有效的,但是這樣做會使得調試更加困難。 ple雙重鏈接列表示例,請參閱:Doubly Linked List (with C..)。這是一個很好的例子。
請將您的代碼發佈在問題中,而不是鏈接到外部網站。努力刪除任何不相關的代碼,即發佈可以發佈的最小代碼,這仍然表明問題。 –
如果您可以包含相關定義,並準確告訴我們錯誤是什麼,我們可以更輕鬆地爲您提供幫助。 – jwismar
您將通過發佈代碼的顯着部分來避免downvotes。我會去看一看,但是在這裏發佈你的代碼將會像Matt McNabb所建議的那樣爲你節省麻煩。 –