/* Programme utilisant une liste chaînée. Testé avec Borland C++. */ #include #include #include #include #include #include "llist.h" void main() { int Done = 0, Char, TempValue; struct LinkNode *TempPtr, *ListPtr, *TempPtr2; char TempBuffer[MAX_TEXT_LENGTH+3]; if ((ListPtr = InitLinkedList()) == NULL) { printf("plus de mémoire disponible\n"); exit(1); } while (!Done) { printf("\nA=ajout; S=suppr; T=trouve; L=liste ; Q=quitte \n>"); Char = toupper(getche()); printf("\n"); switch (Char) { case 'A': /* ajoute un nœud */ if ((TempPtr = malloc(sizeof(struct LinkNode))) == NULL) { printf("en dehors de la mémoire\n"); exit(1); } printf("valeur du nœud: "); scanf("%d", &TempPtr->Value); if ((FindNodeBeforeValue(ListPtr,TempPtr->Value))!=NULL) { printf("***valeur déjà dans la liste; réessayez***\n"); free(TempPtr); } else { printf("texte du nœud: "); TempBuffer[0] = MAX_TEXT_LENGTH; cgets(TempBuffer); strcpy(TempPtr->Text, &TempBuffer[2]); InsertNodeSorted(ListPtr, TempPtr); printf("\n"); } break; case 'S': /* suppression du nœud */ printf(" champ Value du nœud à supprimer: "); scanf("%d", &TempValue); if ((TempPtr = FindNodeBeforeValue(ListPtr, TempValue)) != NULL) { TempPtr2 = TempPtr->NextNode; /* -> nœud à supprimer */ DeleteNodeAfter(TempPtr); /* le supprimer */ free(TempPtr2); /* libère la mémoire */ } else { printf("***aucun champ Value dans la liste***\n"); } break; case 'T': /* trouver un noeud*/ printf("champ Value du noeud à trouver: "); scanf("%d", &TempValue); if ((TempPtr = FindNodeBeforeValue(ListPtr, TempValue)) != NULL) printf("Value: %d\nText: %s\n", TempPtr->NextNode->Value, TempPtr->NextNode->Text); else printf("***aucun champ Value dans la liste***\n"); break; case 'L': /* liste de tous les nœuds */ TempPtr = ListPtr->NextNode; /* pointe sur le premier nœud */ if (TempPtr == ListPtr) { /* vide si sur sentinelle */ printf("*** La liste est vide***\n"); } else { do { printf("Value: %d\n Text: %s\n", TempPtr->Value, TempPtr->Text); TempPtr = TempPtr->NextNode; } while (TempPtr != ListPtr); } break; case 'Q': Done = 1; break; default: break; } } }