- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define STRLEN 64
- typedef struct knoop {
- char naam[STRLEN];
- struct knoop *volgende;
- } Knoop;
- void toonHelp(void);
- void voegToe(char *, Knoop **);
- void verwijder(char *, Knoop **);
- int aanwezig(char *, Knoop *);
- int geefAantal(Knoop *);
- void verwijderLijst(Knoop **);
- void toonLijst(Knoop *);
- char *trim(char *);
- int main(void)
- {
- char instructie[STRLEN];
- Knoop *begin = NULL;
- char *pi;
- printf("Testprogramma voor lineaire lijst. \n");
- printf("Geef instructie (h=hulp) \n");
- printf("\n> ");
- memset(instructie, '\0', STRLEN);
- gets(instructie);
- pi = trim(instructie);
- while (*pi != 'q')
- {
- switch (*pi)
- {
- case 'i':
- voegToe(trim(pi + 1), &begin);
- break;
- case 'd':
- verwijder(trim(pi + 1), &begin);
- break;
- case 'f':
- if (aanwezig(trim(pi + 1), begin))
- printf(" \"%s\" is aanwezig. \n", trim(pi + 1));
- else
- printf("\"%s\" is NIET aanwezig. \n", trim(pi + 1));
- break;
- case 'l':
- toonLijst(begin);
- break;
- case 'n':
- printf(" Aantal elementen in de lijst: %d\n", geefAantal(begin));
- break;
- case 'r':
- verwijderLijst(&begin);
- break;
- case 'h':
- toonHelp();
- case 'q':
- break;
- default:
- printf (" Onbekende instructie (h=help)\n");
- }
- printf("\n");
- memset(instructie, '\0', STRLEN);
- gets(instructie);
- pi = trim(instructie);
- }
- verwijderLijst(&begin);
- return 0;
- }
- void toonHelp(void) {
- printf("i <string> : voegt een element met de gegeven string (alfabetisch) toe aan de lijst\n");
- printf("d <string> : verwijdert element met de gegeven string\n");
- printf("f <string> : zoekt string en geeft weer of deze string aanwezig is.\n");
- printf("l : toont de volledige lijst\n");
- printf("n : geeft aantal elementen in de lijst\n");
- printf("r : verwijdert heel de lijst\n");
- printf("h : geeft help scherm (deze lijst).\n");
- printf("q : einde van het programma (verwijder eerst de lijst)\n");
- }
- void voegToe(char *s, Knoop **b) {
- printf("Deze functie voegt \"%s\" toe aan de lijst\n", s);
- Knoop *nieuw;
- Knoop *p;
- nieuw = (Knoop *)malloc(sizeof(Knoop));
- strcpy(nieuw->naam,s);
- nieuw->volgende=NULL;
- if (*b == NULL)
- {
- *b = nieuw;
- }
- else
- {
- p = *b;
- while(p->volgende != NULL) p = p->volgende;
- p->volgende=nieuw;
- }
- }
- void verwijder(char *s, Knoop **b) {
- printf("Deze functie verwijdert \"%s\" uit de lijst\n", s);
- Knoop*vorige;
- Knoop*p=*b;
- if(b==NULL)
- {
- printf("Persoon is niet aanwezig in de lijst");
- return;
- }
- else
- {
- while((b!=NULL) && (strcmp(s,p->naam)!=0)) {
- vorige = p;
- p=p->volgende;
- }
- if((b!=NULL) && (strcmp(s,p->naam)==0)) {
- vorige->volgende = p->volgende;
- }
- }
- }
- int aanwezig(char *s, Knoop *b) {
- printf("Deze functie zoekt of \"%s\" in de lijst aanwezig is of niet\n", s);
- return 0;
- }
- int geefAantal(Knoop *b) {
- printf("Deze functie geeft het aantal elementen in de lijst \n");
- return 0;
- }
- void verwijderLijst(Knoop **b) {
- Knoop *p = *b;
- while (p != NULL)
- {
- *b = p->volgende;
- free(p);
- p = *b;
- }
- }
- void toonLijst(Knoop *b) {
- if (b == NULL)
- {
- printf("De lijst is LEEG\n");
- }
- else {
- printf("De lijst:\n");
- while (b != NULL)
- {
- printf("%s ", b->naam);
- b = b->volgende;
- }
- }
- printf("\n\n");
- }
- char *trim(char *s) {
- while (*s == ' ')
- s++;
- return s;
- }