ein Kapitel zurück                                           ein Kapitel weiter

Die einfachste und am meist verwendete Form der Suche von Daten ist die lineare Suche (sequentielle Suche). Bei der Sequentiellen Suchen werden die Daten von Anfang bis Ende durchgelaufen bis diese mit dem Suchergebebnis übereinstimmen.

Folgende Vorteile bringt uns die lineare Suche.....

  • einfachste Implementierung und Erstellung mit verketteter Listen
  • es kann auch in nichtsortierten Daten gesucht werden
  • eine bereits sortierte Liste bleibt im Falle vom Einfügen eines neuen Elements sortiert

Der Nachteil der linearen Suche liegen auf der Gegenseite mit....

  • bei einem großem Datensatz wird die Suche sehr langsam, wenn das gesuchte Element zum Beispiel am Ende der Liste ist.

Hierzu ein einfaches Anwendungsbeispiel der sequentiellen Suche.......

/*Download:linear.c*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 255

struct plz{
            char ort[MAX];
            unsigned int plz;
          };

struct plz postleitzahlen[100];
static int N;

/*Initialisieren*/
void init()
{
 N = 0;
 postleitzahlen[N].plz = 0;
 strcpy(postleitzahlen[N].ort, "init");
}

void einfuegen(unsigned int p, char o[])
{
 postleitzahlen[++N].plz = p;
 strcpy(postleitzahlen[N].ort, o);
}

void suche(unsigned int key)
{
 int n=N;
 int i;
 for(i=0; i<=N; i++)
  if(postleitzahlen[i].plz == key)
   {
     printf("Der Ort zur Postleitzahl %d : %s\n",key,postleitzahlen[i].ort);
     return;
   }
 printf("Für den Wert %d konnte keine Postleitzahl gefunden werden!\n",key);
}


int main()
{
 int wahl;
 unsigned int search, post;
 char new_ort[MAX];


 init();
 do{
     printf("-1- Postleitzahl suchen\n");
     printf("-2- Postleitzahl hinzufügen\n");
     printf("-3- Ende\n\n");
     printf("Ihre Wahl : ");
     scanf("%d",&wahl);
     if(wahl == 1)
      {
       printf("Welche Postleitzahl suchen sie : ");
       scanf("%d",&search);
       suche(search);
      }
     else if(wahl == 2)
      {
       printf("Neue Postleitzahl : ");
       scanf("%d",&post);
       printf("Ort für PLZ %d : ",post);
       scanf("%s",new_ort);
       einfuegen(post, new_ort);
      }
    }while(wahl!=3);

 return 0;
}

Natürlich können sie die Suche auch umändern, um von den Orten die Postleitzahlen auszugeben. Dann müssen sie nur die Suchfunktion etwas umbauen......

void suche(char o[])
{
 int n=N;
 int i;
 for(i=0; i<=N; i++)
  if(strcmp(postleitzahlen[i].ort,o) == 0)
   {
     printf("Der Ort zur Postleitzahl %d : %s\n",key,postleitzahlen[i].ort);
     return;
   }
 printf("Für den Wert %s konnte keine Postleitzahl gefunden werden!\n",o);
}  

In den einfachsten Fällen dürfte die lineare Suche völlig ausreichend sein.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf