Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [C] Zoeken in binary tree doormiddel van twee return's.  (gelezen 1699 keer)

Offline Joshua822

  • Lid
[C] Zoeken in binary tree doormiddel van twee return's.
« Gepost op: 2009/12/02, 13:58:49 »
Hallo allemaal.

Ik wil een functie schrijven voor het zoeken naar een waarde in een binary tree. Ik denk dat dit juist is :
struct node * search_bt ( struct node * bt, unsigned short s_waarde, unsigned short gedrag )
{
  while ( bt )
  {
    if ( s_waarde == bt->waarde )
      return bt;
    else
      if ( s_waarde <= bt->waarde )
        bt = bt->links;
      else
        bt = bt->rechts;
  }
  return NULL;
}

Dit zou moeten gebeuren :
  • Lees de binary tree totdat de waarde gevonden wordt.
  • Als de waarde gevonden wordt, geef de variabel "bt" terug.
  • Als de waarde uiteindelijk niet gevonden wordt, geef dan "NULL" terug.

Ik zou willen weten of dit echter ook zal gebeuren, of dat ik dit probleem zal moeten oplossen door middel van recursie of een andere oplossing.

Alvast bedankt.

Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #1 Gepost op: 2009/12/02, 14:23:00 »
Wel, ik zou zo zeggen, probeer het uit en zie eh :)
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #2 Gepost op: 2009/12/02, 15:12:54 »
Wel, natuurlijk :
In function 'ins_bt':
81: error: syntax error at end of input.

#include <stdio.h>
#include <stdlib.h>

struct node
{
  unsigned short waarde;
  struct node * links;
  struct node * rechts;
};

struct node * search_bt ( struct node * bt, unsigned short s_waarde );
void ins_bt ( struct node * bt, unsigned short s_waarde );
void print_bt ( struct node * bt );
void del_bt ( struct node * bt );

int main ()
{
  struct node * root = ( struct node * ) malloc ( sizeof ( struct node ) );
  root->waarde = 25;
  root->links = ( struct node * ) malloc ( sizeof ( struct node ) );
  root->rechts = ( struct node * ) malloc ( sizeof ( struct node ) );
  ins_bt ( root, 38 );
  print_bt ( root );
  del_bt ( root );
  return 0;
}

struct node * search_bt ( struct node * bt, unsigned short s_waarde )
{
  while ( bt )
  {
    if ( s_waarde == bt->waarde )
      return bt;
    else
      if ( s_waarde <= bt->waarde )
        bt = bt->links;
      else
        bt = bt->rechts;
  }
  return NULL;             
}
void ins_bt ( struct node * bt, unsigned short s_waarde )
{
  if ( bt )
  {
    while ( bt->links && bt->rechts )
      if ( s_waarde <= bt->waarde )
        bt = bt->links;
      else
        bt = bt->rechts;
    if ( bt->waarde == 0 )
      bt->waarde = s_waarde;
    else if ( s_waarde <= bt->waarde )
    {
      bt->links = ( struct node * ) malloc ( sizeof ( struct node ) );
      bt->waarde = s_waarde;
    }
    else
    {
      bt->rechts = ( struct node * ) malloc ( sizeof ( struct node ) );
      bt->waarde = s_waarde;
    }

void print_bt ( struct node * bt )
{
  if ( bt )
  {
    print_bt ( bt->links );
    print_bt ( bt->rechts );
    printf ( "%hu \n", bt->waarde );
  }
}
void del_bt ( struct node * bt )
{
  if ( bt )
  {
    del_bt ( bt->links );
    del_bt ( bt->rechts );
    free ( bt );
  }
}
En laat regel 81 nou even toevallig niet behoren tot de functie "ins_bt".

Offline track

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #3 Gepost op: 2009/12/02, 15:30:44 »
 =D  Heb je de accolades geteld ?
Als ik me niet vergis is er een "}" te weinig.

(Als hij een foutmelding achter het laatste commando gooit zal dat belletje moeten rinkelen)

track
« Laatst bewerkt op: 2009/12/02, 15:32:33 door track »

Offline Joshua822

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #4 Gepost op: 2009/12/02, 15:51:53 »
Oké, het compileert nu, maar raad eens ! Ja, je raad het al, Windows ( ja, sorry, 't is maar tijdelijk, eerlijk waar :P ) zegt dat het programma gestopt is met werken en er naar een oplossing voor het probleem wordt "gezocht".

Hier is de code :
#include <stdio.h>
#include <stdlib.h>

struct node
{
  unsigned short waarde;
  struct node * links;
  struct node * rechts;
};

struct node * search_bt ( struct node * bt, unsigned short s_waarde );
void ins_bt ( struct node * bt, unsigned short s_waarde );
void print_bt ( struct node * bt );
void del_bt ( struct node * bt );

int main ()
{
  struct node * root = ( struct node * ) malloc ( sizeof ( struct node ) );
  root->waarde = 25;
  root->links = ( struct node * ) malloc ( sizeof ( struct node ) );
  root->rechts = ( struct node * ) malloc ( sizeof ( struct node ) );
  ins_bt ( root, 38 );
  print_bt ( root );
  del_bt ( root );
  return 0;
}

struct node * search_bt ( struct node * bt, unsigned short s_waarde )
{
  while ( bt )
  {
    if ( s_waarde == bt->waarde )
      return bt;
    else
      if ( s_waarde <= bt->waarde )
        bt = bt->links;
      else
        bt = bt->rechts;
  }
  return NULL;             
}
void ins_bt ( struct node * bt, unsigned short s_waarde )
{
  if ( bt )
  {
    while ( bt->links && bt->rechts )
      if ( s_waarde <= bt->waarde )
        bt = bt->links;
      else
        bt = bt->rechts;
    if ( bt->waarde == 0 )
      bt->waarde = s_waarde;
    else if ( s_waarde <= bt->waarde )
    {
      bt->links = ( struct node * ) malloc ( sizeof ( struct node ) );
      bt->waarde = s_waarde;
    }
    else
    {
      bt->rechts = ( struct node * ) malloc ( sizeof ( struct node ) );
      bt->waarde = s_waarde;
    }
  }

void print_bt ( struct node * bt )
{
  if ( bt )
  {
    print_bt ( bt->links );
    print_bt ( bt->rechts );
    printf ( "%hu \n", bt->waarde );
  }
}
void del_bt ( struct node * bt )
{
  if ( bt )
  {
    del_bt ( bt->links );
    del_bt ( bt->rechts );
    free ( bt );
  }
}

Offline track

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #5 Gepost op: 2009/12/02, 16:07:04 »
 =D (vooral jouw verontschuldiging...)

Maar, dat is enigzins gewone "C" toch ?  Kun je dat niet met gcc compileren dan ?
Of, met de parameter "strict" voor stricte ANSI-controle ?

track

Offline Joshua822

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #6 Gepost op: 2009/12/02, 16:17:54 »
Ik heb net met de parameters "ansi", "Wall", en "pedantic" gecompileerd, en dat geeft geen foutmeldingen. Maar jammer genoeg mocht het niet baten.

Offline track

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #7 Gepost op: 2009/12/02, 16:21:55 »
Ja, die parameters bedoelde ik ...
En je kunt dat ding niet onder gcc Linux compileren ?
Of eventuëel met gcc Win.. ?  Die is er toch ook nog.

track

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #8 Gepost op: 2009/12/02, 16:23:47 »
Wel eens van debuggen gehoord? Dan kun je je programma stapsgewijs doorlopen en precies zien op welke regels het programma op zn bek gaat.
Dit kan volgens mij in elke fatsoenlijke IDE.
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline Joshua822

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #9 Gepost op: 2009/12/02, 16:37:45 »
Sorry, maar ik ben meer het programmeert-in-kladblok type :P

Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #10 Gepost op: 2009/12/02, 16:49:59 »
gdb?
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #11 Gepost op: 2009/12/02, 16:54:20 »
Sorry, maar ik ben meer het programmeert-in-kladblok type :P
En hoe vaak heb je je haren al uit je kop getrokken? :P
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline Joshua822

  • Lid
Re: [C] Zoeken in binary tree doormiddel van twee return's.
« Reactie #12 Gepost op: 2009/12/02, 17:03:48 »
Citaat
En hoe vaak heb je je haren al uit je kop getrokken? Tongue

Ongeveer honderdvierendertig keer