Praktische Informatik 1

Slides:



Advertisements
Ähnliche Präsentationen
Objektorientierte Programmierung
Advertisements

Klassen - Verkettete Liste -
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann.
Sortieren I - Bubblesort -
Kapitel 5. Stacks und Queues
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Synonyme: Stapel, Keller, LIFO-Liste usw.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
Listen Richard Göbel.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (06 - Anwendungen von Stapeln und Schlangen) Prof. Th. Ottmann.
Anwendungen von Stapeln und Schlangen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Informatikunterricht mit Java
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Anforderungen an die neue Datenstruktur
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Praktische Informatik 1
Praktische Informatik 1
Zwei Denkansätze zur Klasse Schlange
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Mit der Turtle Java Programmieren
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Mit Java die Turtle steuern
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Praktische Informatik 1 Prof. Dr. H. Schlingloff 28. 1. 2008

8.3 Applets, Internetprogrammierung Applets sind Java-Programme, die aus HTML-Seiten aufgerufen werden können Virtuelle Java-Maschine als Browser-Plugin Grund für den Erfolg von Java, neue Technologie der „Web Services“ Aus Sicherheitsgründen eingeschränkte Rechte (z.B. Cookies statt Dateizugriff)

Vorgehensweise Erstellung in Eclipse Einbindung in Webseite: <applet code="AppletDemo.HalloWelt.class„ width=320 height=240></applet> package AppletDemo; import java.awt.*; import java.applet.*; public class HalloWelt extends Applet { public void paint (Graphics g) { g.drawString("Hallo Welt!", 30, 20); } } package AppletDemo; import java.awt.*; import java.applet.*; public class HalloWelt extends Applet { public void paint (Graphics g) { g.drawString("Hallo Welt!", 30, 20); } }

Tips&Tricks .class-Datei muss in mit Paketnamen benannten Unterverzeichnis des Verzeichnisses der .html-Datei liegen Parameterübergabe aus HTML: Webseite ...</applet><param name="farbe" value = "grün"> public void paint (Graphics g) { String col = getParameter("farbe"); if (col==null) setBackground(Color.lightGray); else if(col.equals("blau")) setBackground(Color.blue); g.drawString(col+"e Welt!", 60, 80); } package AppletDemo; import java.awt.*; import java.applet.*; public class HalloWelt extends java.applet.Applet { public void paint (Graphics g) { String col = getParameter("farbe"); if (col==null) setBackground(Color.lightGray); else if(col.equals("blau")) setBackground(Color.blue); else if(col.equals("grün")) setBackground(Color.green); g.drawString(col+"e Welt!", 60, 80); showStatus("Applet läuft"); }

Kapitel 9: Algorithmen und Datenstrukturen 9.1 Listen, Bäume, Graphen 9.2 Suchen und Sortieren 9.3 Graphalgorithmen

Alg&DS… … wurden klassischerweise als „das“ Thema der praktischen Informatik betrachtet … Bedeutung rückläufig wegen umfangreicher Bibliotheken … Forschungsfragen und Überraschungseffekte … Kenntnis der Funktionsweise für Informatiker unerläßlich

9.1 Listen, Bäume, Graphen rekursive Datentypen jedes Objekt gehört zu einer bestimmten Klasse Beispiel: int i; Thread f; PKW herbie; Objekte können andere Objekte als Bestandteile enthalten Beispiel: Auto enthält Tachostand kann ein Objekt andere Objekte der selben Klasse enthalten?

rekursive Datenstrukturen Rekursion in Delphi mit Zeigern aufgelöst In Java gibt es keine Zeiger (-typen), aber es gibt Objekte Es ist erlaubt, dass ein Objekt eine Komponente vom selben Typ enthält wie das Objekt selbst Rekursionsende: null

verkettete Listen Listen sind endliche Folgen von Elementen Beispiel für dynamische Datenstruktur: Im Unterschied zu Arrays können Listen beliebig wachsen und schrumpfen neue Elemente werden an die Liste angehängt nicht mehr benötigte Elemente können entfernt werden Verkettete Listen kann man sich wie eine Perlenschnur vorstellen von jeder Perle gibt es eine Verbindung zur folgenden in den Perlen befindet sich die Information Die Liste besteht aus Zellen: jede Zelle hat einen Inhalt, und einen Verweis auf die folgende Zelle

Listen als Perlenschnur

Drucken einer Liste class Zelle{ int inhalt; Zelle next; public String toString(){ return inhalt+((next==null)?"": " -> " + next.toString()); } } class Liste{ ... public String toString(){return anfang.toString();} public class ListenAnwendung { static Liste l = new Liste(); public static void main(String[] args) { l.insert(101); l.insert(38); l.insert(42); System.out.println(l); } package Listen; class Zelle{ int inhalt; Zelle next; Zelle(int inh, Zelle nxt){ inhalt = inh; next = nxt; } public String toString() { return inhalt+((next==null)?"": " -> " + next.toString()); class Liste{ Zelle anfang; void insert(int n) { Zelle z = new Zelle(n, anfang); anfang = z; return anfang.toString(); public class ListenAnwendung { static Liste l = new Liste(); public static void main(String[] args) { l.insert(101); System.out.println(l); l.insert(38); System.out.println(l); l.insert(42); System.out.println(l); l.insert(17); System.out.println(l);

Entfernen des ersten Elementes Um das erste Element zu löschen, setzen wir den Anfang einfach auf das zweite Element: Der vorherige Anfang ist damit nicht mehr zugreifbar! Natürlich darf das nur ausgeführt werden, falls die Liste nicht leer ist anfang inhalt next inhalt next inhalt next 333 222 101 anfang = anfang.next

Entfernen eines inneren Elementes Um ein inneres Element zu löschen, verbinden wir die Vorgängerzelle mit der Nachfolgerzelle: Die Liste wird dadurch verändert! Das abgeklemmte Element wird irgendwann von der Speicherbereinigung entdeckt, der Platz wiederverwendet

Entfernen des n-ten Elementes

void removeNth(int n) { if(anfang !=null) { Zelle v = anfang; void removeFirst() { anfang = anfang.next; } void removeNth(int n) { if(anfang !=null) { Zelle v = anfang; while (v.next!=null && n>1) { v = v.next; n--;} if(v.next!=null) v.next = v.next.next; } Achtung: removeFirst() ist nicht das selbe wie removeNth(1)

weitere Listenoperationen int länge(){ int i = 0; Zelle z = anfang; while (z!=null) { i++; z=z.next; } return i; } boolean enthält(int n) { boolean gefunden = false; Zelle z = anfang; while (z!=null && !gefunden) { if (z.inhalt==n) gefunden=true; z=z.next; } return gefunden; } package Listen; class Zelle{ int inhalt; Zelle next; Zelle(int inh, Zelle nxt){ inhalt = inh; next = nxt; } public String toString() { return inhalt+((next==null)?"": " -> " + next.toString()); class Liste{ Zelle anfang; void insert(int n) { Zelle z = new Zelle(n, anfang); anfang = z; return anfang.toString(); void removeFirst() { anfang = anfang.next; void removeNth(int n) { if(anfang !=null) { Zelle v = anfang; while (v.next!=null && n>1) { v = v.next; n--;} if(v.next!=null) v.next = v.next.next; int länge(){ int i = 0; Zelle z = anfang; while (z!=null) { i++; z=z.next; } return i; boolean enthält(int n) { boolean gefunden = false; Zelle z = anfang; while (z!=null && !gefunden) { if (z.inhalt==n) gefunden=true; z=z.next; } return gefunden; Zelle suche(int n){ while (z!=null) { if (z.inhalt==n) return z; return z; public class ListenAnwendung { static Liste l = new Liste(); public static void main(String[] args) { l.insert(101); System.out.println(l); l.insert(38); System.out.println(l); l.insert(42); System.out.println(l); l.insert(17); System.out.println(l); l.removeFirst(); System.out.println(l); l.insert(99); System.out.println(l); l.removeNth(2); System.out.println(l); System.out.println(l.länge()); System.out.println(l.enthält(42)); System.out.println(l.suche(42)); System.out.println(l.suche(333)); Zelle suche(int n){ Zelle z = anfang; while (z!=null) { if (z.inhalt==n) return z; z=z.next; } return z; }

Realisierung von Kellern mit Listen class Stapel extends Liste { Stapel() {} Stapel(Zelle z) { anfang = z; } boolean isEmpty(){ return anfang==null; } Stapel push(int i) { Zelle z = new Zelle(i, anfang); return new Stapel(z);} Stapel pop() { return new Stapel(anfang.next); } int top() { return anfang.inhalt; } } package Listen; class Stapel extends Liste { Stapel() {} Stapel(Zelle z) { anfang = z; } boolean isEmpty(){ return anfang==null; } Stapel push(int i) { Zelle z = new Zelle(i, anfang); return new Stapel(z);} Stapel pop() { return new Stapel(anfang.next); } int top() { return anfang.inhalt; } } class StapelDemo{ static Stapel empty = new Stapel(); public static void main(String[] args) { System.out.println(empty.isEmpty()); System.out.println(empty); System.out.println(empty.push(111)); Stapel s = empty.push(111).push(222).push(333); System.out.println(s); System.out.println(s.pop().push(444)); System.out.println(s.pop().push(444).pop().pop().top()); }

Problem Durch diese Art der Implementierung wird bei jedem push und pop ein neuer Listenanfang generiert wird von der Speicherbereinigung aufgesammelt trotzdem ein gewisser Effizienzverlust

nichtfunktionale Implementierung Stapel pop() { return new Stapel(anfang.next); } Stapel push(int n) { Zelle z = new Zelle(n, anfang); return new Stapel(z); } Stapel popSE() { removeFirst(); return this; } Stapel pushSE(int n) { insert(n); return this; } *********************** System.out.println(s); System.out.println(s.popSE().pushSE(555)); Stapel popSE() { removeFirst(); return this; } Stapel pushSE(int n) { insert(n); return this; }

Ausführung Jetzt wird nur noch auf ein und derselben Liste gearbeitet!

Unterschied? public class StapelDemo { Stapel s1 = new Stapel(); int sampleMethod() { s1=s1.push(111).push(222).push(333); s2=s1.pop(); return s1.top(); } } Stapel s1 = new Stapel(), s2 = new Stapel(); s1=s1.push(111).push(222).push(333); s2=s1.pop(); System.out.println(s1); System.out.println(s2); Was passiert beim Austausch von pop durch popSE?

Schlangen Zur Implementierung von Schlangen braucht man einen zusätzlichen Zeiger auf den Anfang der Schlange Um den Aufbau am Schlangenende und den Abbau am Anfang zu implementieren, wird die Verkettung sozusagen „umgedreht“

Realisierung von Schlangen public class Queue extends Liste { Zelle ende; boolean isEmpty(){ return anfang==null; } int head() { return anfang.inhalt; } void tail() {anfang=anfang.next; } void append(int n) { Zelle z = new Zelle(n, null); if (isEmpty()) { anfang = z; ende = z; } else { ende.next = z; ende = z; } } package Listen; public class Schlange extends Liste { Zelle ende; boolean isEmpty(){ return anfang==null; } int head() { return anfang.inhalt; } void tail() {anfang=anfang.next; } void append(int n) { Zelle z = new Zelle(n, null); if (isEmpty()) { anfang = z; ende = z; } else { ende.next = z; ende = z; } } } class SchlangenDemo{ static Schlange s = new Schlange(); public static void main(String[] args) { s.append(100); System.out.println(s); s.append(200); s.append(300); System.out.println(s.head()); s.tail();

Doppelt verkettete Listen Für Listen, die auf beiden Seiten zugreifbar sein sollen, bietet sich eine symmetrische Lösung an Für jede Zelle wird Nachfolger und Vorgänger in der Liste gespeichert Beim Einfügen und Löschen müssen die doppelten Verkettungen beachtet werden

Sequenzen als doppelt verkettete Listen public class Sequenz { Item erstes, letztes; Sequenz() {} Sequenz(Item e, Item l) { erstes=e; letztes=l; } boolean isEmpty() { return (erstes==null); } int first (){ return erstes.inhalt; } Sequenz rest() { return new Sequenz(erstes.rechts.erstes,letztes); } Sequenz prefix(int i) { Item neu = new Item(); neu.inhalt = i; if (this.isEmpty()) { return new Sequenz(neu,neu); } else { neu.rechts = erstes.rechts; erstes.links = neu.links; return new Sequenz(neu, letztes); } …} class Item{ int inhalt; SeqInt links, rechts; }