Hey guys im trying to convert this singly linked list code into a doubly linked list could someone have a look at the code and see if its correct and maybe give some advice.
Thankyou
Code:typedef struct category* CategoryTypePtr; typedef struct item* ItemTypePtr; /* Structure definitions. */ typedef struct price { unsigned dollars; unsigned cents; } PriceType; typedef struct item { char itemID[ID_LEN + 1]; char itemName[MAX_NAME_LEN + 1]; PriceType prices[NUM_PRICES]; char itemDescription[MAX_DESC_LEN + 1]; ItemTypePtr nextItem; ItemTypePtr prevItem; } ItemType; typedef struct category { char categoryID[ID_LEN + 1]; char categoryName[MAX_NAME_LEN + 1]; char drinkType; /* (H)ot or (C)peold. */ char categoryDescription[MAX_DESC_LEN + 1]; CategoryTypePtr nextCategory; CategoryTypePtr prevCategory; ItemTypePtr headItem; unsigned numItems; } CategoryType; typedef struct gjc { CategoryTypePtr headCategory; unsigned numCategories; } GJCType;
Code:current = menu->headCategory; /* Find the right category for the item to be inserted */ while(current != NULL) { /* If the right category has been found for the item to be inserted. */ if(strcmp(current->categoryID,categoryIDcopy) == 0) { submenuCurrent = current->headItem; /* Increase the number of items when an item is added */ current->numItems++; /* If nothing exists in the category, add to the head of the item list. */ if(submenuCurrent == NULL) { submenuCurrent = submenuNode; current->headItem = submenuCurrent; submenuCurrent->nextItem = NULL; } else { submenuPrevious = NULL; /* Find the right position to insert the item. */ while((submenuCurrent != NULL) && strcmp(submenuCurrent->itemName, submenuNode->itemName) < 0) { submenuPrevious = submenuCurrent; submenuCurrent->prevItem = submenuPrevious; submenuCurrent = submenuCurrent->nextItem; } /* If inserting at the head of the list. */ if(submenuCurrent == current->headItem) { submenuNode->nextItem = submenuCurrent; submenuCurrent = submenuNode; current->headItem = submenuCurrent; } /* If adding to the end of the list. */ else if(submenuCurrent == NULL) { submenuPrevious->nextItem = submenuNode; submenuCurrent = submenuNode; submenuCurrent->nextItem = NULL; } /* If adding somewhere in between the list. */ else { submenuPrevious->nextItem = submenuNode; submenuNode->nextItem = submenuCurrent; } } } current = current->nextCategory; } }



LinkBack URL
About LinkBacks


