verketette listen.

Hast du's schon mal mit :google: versucht?
Es gibt da auch sowas wie Wikipedia.
Und alle spucken massig Artikel aus.

Aber da ich grad nix besseres zu tun habe - ein kleines Beispiel in Java

Java:
public class Node {
    int info;    
    Node next;

    public void Node(int info) {
        this.info = info;
    }

    public void setNext(node next) {
        this.next = next;
    }
 
    public Node getNext() {
        return next;
    }

    public int getInfo() {
        return info;
    }

    public void setInfo(int info) {
        this.info = info;
    }

    public void iterate() {
        if(info != 0) {
             System.out.println(info);
             next.iterate();
        }
    }
}

Das ist ein klassischer Knoten einer verketteten Liste, der alles bietet, was man braucht um eine verkettete Liste zu erstellen. Es wird extern ein Null-Knoten definiert, der ein Abbruchkriterium (im Beispiel info = -1) enthält. Danach kannst du Kette aufbauen und an jeder Position die Iteration starten (Knoten1.iterate() = gesamte Liste, Knoten73.iterate() = Teil der Liste)
 
Das Problem bei mir waren die Referenzen. Danke für die Hilfe. Wenn jemand anhand einer verketetten Liste ein Menü erstellen will. Hier ist der Code. Natürlich noch ausbaubar.

PHP:
<?php

class MenueAttributes
 {
	public $menueName;
	public $felderverweise = array();
	public $feldernamen = array();
	public $menuePrevious;
	public $menueNext;
	
	function __construct()
	{
	}
}


?>

PHP:
<?php
require_once("Includes\menue\menueAttributes-class.php");

class Menue extends MenueAttributes 
{	
	public $menueAktuell;
	
	function __construct($felderverweise,$feldernamen,$name)
	{
		$this->menueAktuell = new MenueAttributes();
		$this->menueAktuell->menuePrevious = null;
		$this->menueAktuell->menueName = &$name;
 		for($i=0;$i<sizeof($feldernamen);$i++)
 		{
 			$this->add($felderverweise[$i], $feldernamen[$i]);
 		}
	}
	
	function __destruct() //zerstört das ganze Menue *muhahaha*
	{
		unset($this->menueAktuell);
	}
	
	function addMenue($felderverweise,$feldernamen,$name) //fügt ein Menue mit einer bestimmten FelderAnzahl hinzu
	{
		if(sizeof($felderverweise) == sizeof($feldernamen))
		{
			$this->menueAktuell->menueNext = new MenueAttributes(); //erstellt ein neues Menue in der Liste
			$this->menueAktuell->menueNext->menuePrevious = $this->menueAktuell;
 			$this->menueAktuell->menueNext->menueNext = null;
			$this->menueAktuell = $this->menueAktuell->menueNext; //setzt die Liste auf das neue Menue
			$this->menueAktuell->menueName = &$name;
 			for($i=0;$i<sizeof($feldernamen);$i++)
 			{
 				$this->add($felderverweise[$i], $feldernamen[$i]);
 			}
		}
	}
	
	function &getMenue()
	{
		echo "Menueaktuell: ".$this->menueAktuell->menueName."<br>";
		return $this->menueAktuell;
	}
	
	function setMenue(&$menueAktuell)
	{
		$this->menueAktuell = $menueAktuell;
	}
	
function setMenue($menueName) //Setzt das aktuelle Menue auf das Menue mit dem Menuenamen $menueName
	{
		$this->goToFirst();
		while($this->menueAktuell->menueName != $menueName || $this->menueAktuell != null)
		{
			$this->menueAktuell = $this->menueAktuell->menueNext;
		}
	}
	function add(&$felderverweis,&$feldername) //Fügt einem Menue ein Feld hinzu
	{
		array_push($this->menueAktuell->felderverweise, &$felderverweis);
		array_push($this->menueAktuell->feldernamen, &$feldername);
	}
	
	function delete($feldername)
	{
		if(($index = array_search($feldername, $this->menueAktuell->feldernamen)))
		{
			unset($this->menueAktuell->feldernamen[$index]);
			unset($this->menueAktuell->felderverweise[$index]);
		}
	}
	
	function goToFirst() //geht zum ersten Menue
	{
		while(($this->menueAktuell->menuePrevious != null))
		{
			$this->menueAktuell = &$this->menueAktuell->menuePrevious;
		}
	}
	
	function goToLast() //geht zum Letzten Menue
	{
		while(($this->menueAktuell->menueNext != null))
		{
			$this->menueAktuell = &$this->menueAktuell->menueNext;
		}
	}
	
	function showMenue() //gibt das Menue formatiert aus
	{
		echo "<ul id='navi'>";
		echo "<li type='square'>".$this->menueAktuell->menueName."</li>";
		for($i=0; $i < sizeof($this->menueAktuell->felderverweise); $i++) //durchläuft alle Felder eines Menues
		{
			echo "<li><a href='index.php?mainsite=".$this->menueAktuell->felderverweise[$i]."'>".$this->menueAktuell->feldernamen[$i]."</a></li>";
		}
		echo "</ul>";
	}
}

?>

Verwendung der Klasse:

PHP:
$felderverweis = array("login.php","registry.php","login.php","forum.php");
$feldernamen = array("Startseite","Registrieren","Login","Forum");
$menue = new Menue($felderverweis,$feldernamen,"Main"); //Neues Menue erstellen

$felderverweis = "Formulare\Adminbreich\admin.php";
$feldername = "Adminbereich";
$menue->add($felderverweis,$feldername); //Feld im aktuellen Menue hinzufügen

$menue->delete($feldername); //Feld im aktuellen Menue löschen
$menue->showMenue(); //aktuelle Menü ausgeben
 
Zuletzt bearbeitet:
Zurück