







|

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.

© 2001,2002 Jürgen Wolf
|