Løsningsforslag Oppgavesett 6

Fra Hiofwiki

Gå til: navigasjon, søk

Innhold

Gruppe i

Oppgavesett 6

Oppgave 6.1

package Sett6;

import java.util.LinkedList;

/**
 *
 * @author Erik Eiesland <erik.eiesland@hiof.no>
 */
public class MyQueue <E extends Comparable<? super E>> implements Queue<E>
{
    LinkedList<E> list = new LinkedList<E>();
    
    public void enqueue(E element)
    {
        list.addLast(element);
    }

    public E dequeue()
    {
        return list.removeFirst();
    }

    public E first()
    {
        return list.getFirst();
    }

    public boolean isEmpty()
    {
        return list.isEmpty();
    }

    public int size()
    {
        return list.size();
    }
    
    public void enqueueAll(MyQueue<E> q)
    {
        int j = q.size();
        for (int i=0; i < j; i++)
        {
            list.addLast(q.dequeue());
        }
    }
}
package Sett6;

import java.io.File;
import java.util.Arrays;
import java.util.List;

/**
 *
 * @author Erik Eiesland <erik.eiesland@hiof.no>
 */
public class FileLister
{
    public static void main(String[] args)
    {
        MyQueue<File> q = getFileListing(new File(args[0]));
        
        int j = q.size();
        for (int i=0; i<j; i++)
        {
            System.out.println(q.dequeue());
        }
    }
    
    public static MyQueue<File> getFileListing(File startDir)
    {
        MyQueue<File> q = new MyQueue<File>();
        File[] fileListing = startDir.listFiles();
        
        for (int i=0; i<fileListing.length; i++)
        {
            q.enqueue(fileListing[i]);
            if (!fileListing[i].isFile())
            {
                MyQueue<File> deeperList = getFileListing(fileListing[i]);
                q.enqueueAll(deeperList);
            }
        }
        
        /* Alternativ løsning med List:
        List<File> filesDirs = Arrays.asList(fileListing);
        for(File file : filesDirs)
        {
            q.enqueue(file);
            if (!file.isFile())
            {
                MyQueue<File> deeperList = getFileListing(file);
                q.enqueueAll(deeperList);
            }
        }
        */
        return q;
    }
}

Oppgave 6.2

package Sett6;

import java.util.LinkedList;

/**
 *
 * @author Erik Eiesland <erik.eiesland@hiof.no>
 */
public class MyStack <E extends Comparable<? super E>> implements Stack<E>
{
    LinkedList<E> list = new LinkedList<E>();
    
    public void push(E element)
    {
        list.push(element);
    }

    public E pop()
    {
        return list.pop();
    }

    public E peek()
    {
        return list.peek();
    }

    public int size()
    {
        return list.size();
    }

    public boolean isEmpty()
    {
        return list.isEmpty();
    }
    
    public void mergeStack(MyStack<E> s)
    {
        MyStack<E> n = new MyStack<E>();
        
        int j = s.size();
        for (int i=0; i < j; i++)
        {
            n.push(s.pop());
            list.push(n.pop());
        }
    }
}
package Sett6;

import java.io.File;

/**
 *
 * @author Erik Eiesland <erik.eiesland@hiof.no>
 */
public class FileListerStack
{
    public static void main(String[] args)
    {
        MyStack<File> s = getFileListing(new File(args[0]));
        
        int j = s.size();
        for (int i=0; i<j; i++)
        {
            System.out.println(s.pop());
        }
    }
    
    public static MyStack<File> getFileListing(File startDir)
    {
        MyStack<File> s = new MyStack<File>();
        File[] fileListing = startDir.listFiles();
        
        for (int i=0; i<fileListing.length; i++)
        {
            s.push(fileListing[i]);
            if (!fileListing[i].isFile())
            {
                MyStack<File> deeperList = getFileListing(fileListing[i]);
                s.mergeStack(deeperList);
            }
        }
        
        return s;
    }
}

Oppgave 6.3

...

Oppgave 6.4

package Sett6;

import java.util.ArrayList;

/**
 *
 * @author Erik Eiesland <erik.eiesland@hiof.no>
 */
public class MyNewStack <E extends Comparable<? super E>> implements Stack<E>
{
    ArrayList<E> list = new ArrayList<E>();
    E max;

    //legger til element på slutten av listen og legger det også i max
    //hvis det er større enn det som er der fra før
    public void push(E element)
    {
        if (list.isEmpty())
        {
            max = element;
        }
        if (element.compareTo(max) > 0)
        {
            max = element;
        }
        list.add(element);
    }
    
    //fjerner siste element i listen
    public E pop() {return list.remove(list.size()-1);}

    //ser på siste element i lista
    public E peek() {return list.get(list.size()-1);}

    //returnerer størrelsen på listen
    public int size() {return list.size();}

    //sjekker om listen er tom
    public boolean isEmpty() {return list.isEmpty();}
    
    //returnerer maxelementet
    public E max() {return max;}
}

Oppgave 6.5

...

Oppgave 6.6

...

Oppgave 6.7

...