comp.lang.ada
 help / color / mirror / Atom feed
From: Michal Nowak <vinnie@inetia.pl>
To: "comp.lang.ada usegroup->mailing list gateway"
	<comp.lang.ada@ada.eu.org>
Subject: Re: Can someone help me understand this queue package?
Date: Sat, 29 Dec 2001 12:35:44 +0100
Date: 2001-12-29T12:35:44+01:00	[thread overview]
Message-ID: <mailman.1009625522.9105.comp.lang.ada@ada.eu.org> (raw)
In-Reply-To: <pN6X7.51803$US4.9178551@news2-win.server.ntlworld.com>

On 01-12-28 at 22:57 Liddle Feesh wrote:

>"Michal Nowak" wrote:

>> Look at John English's book "ADA 95: THE CRAFT OF OBJECT-ORIENTED
>PROGRAMMING"
>> at: http://www.it.bton.ac.uk/staff/je/adacraft/
>
>I'll give it a shot - esp as it's online, and I won't have to take it out
>of the library.

You may even download all zipped files.

>> >Could someone be so kind as to convert the following package into
>> >pseudo-code for me?
>>
>> No :-)).
>> Solution 1.
>> Treat a queue as a simple list (you may abandon Iterators idea for
>> simplicity), with operations Add and Remove.
>> Add is something like Insert at beginning,
>> and Remove is like delete at the end.
>
>Will do... What is Iterators idea?

"ADA 95: THE CRAFT OF OBJECT-ORIENTED PROGRAMMING" - chapter 11
(in particular - 11.4)

>> Solution 2.
>> Take paper, pencil and draw what is happening with pointers (access
>> types) during addition and removal (such as on pictures in chapter 11).
>> Than implement it.
>
>Yes, but what >IS< happening with pointers? I'll have a go.

Ooops, I don't get what you mean by it. Hmm, you create a node, a then
set some variables f access types (pointers) to point you to this node,
and some pointers from this node to point to another node.

    end of queue                       Beginning of queue
        |                                     |
       \|/                                   \|/
        V                                     V
  --------------      ---------------     ----------------
  | Data | Next|--->  | Data | Next |---> | Data | Next |
  --------------      ---------------     ----------------
      Node 3             Node 2               Node 1

Suppose now you add something to the end of the queue.
You create new node (let's call it New_Node) and set its
Next pointer to point to last element in the queue.

      end of queue                      Beginning of queue
       (Tail)                               (Head)
         |                                     |
        \|/                                   \|/
         V                                     V
  --------------      ---------------      ---------------
  | Data | Next|--->  |Data  | Next |---> | Data | Next |
  --------------      ---------------      ---------------
      Node 3             Node 2               Node 1


  --------------
  | Data| Next  |
  ---------------
   New_Node

New_Node.Next := Tail;
Tail          := New_Node;

So now you have something like this:

      end of queue                               Beginning of queue
       (Tail)                                          (Head)
         |                                                |
        \|/                                              \|/
         V                                                V
 -------------     ------------    -------------     --------------
 | Data| Next |-->| Data | Next|-->| Data| Next |-->| Data | Next |
 -------------     -------------   -------------     --------------
    New node        Node 3             Node 2              Node 1


Removal is similar, although you may need to add Prev to node to point for
previous item for convenience (unless you want to go through whole queue to
search for element before the last one).

So if we remove Node_1 element (Node_2 := Node_1.Prev)
Node_2.next := null;
Head        := Node_2;

Is this what you were looking for?

>> BTW it looks like a homework or something. Do you want to stay with Ada
>> for a longer time, or just write the program, pass the subject, and
>forget?
>
>I like the principals of ADA - it'll probably be something I'll stick with
>and have to learn. I'm trying to read it as part of my degree;

Great. So you should know a secret - it is Ada :-))

>of course
>ADA
>is quite a good skill to learn; esp. with the industries in my local area.

I may envy you that...

>> However, good luck and don't break down,
>
>I think I'm about to cry...

Oh, boy, don't joke ;-))

Mike




  reply	other threads:[~2001-12-29 11:35 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-28 17:14 Can someone help me understand this queue package? Liddle Feesh
2001-12-28 18:16 ` Michal Nowak
2001-12-28 22:57   ` Liddle Feesh
2001-12-29 11:35     ` Michal Nowak [this message]
2001-12-29 19:37       ` Liddle Feesh
2001-12-29 20:05         ` Michal Nowak
2001-12-29 20:44           ` Liddle Feesh
2001-12-29 22:02       ` Liddle Feesh
2001-12-30 13:14         ` Michal Nowak
2001-12-30 22:28           ` Liddle Feesh
2001-12-31 10:32             ` Michal Nowak
2001-12-29 17:13   ` Liddle Feesh
2001-12-29 18:42     ` martin.m.dowie
2001-12-29 19:09       ` Liddle Feesh
2001-12-29 17:13   ` Liddle Feesh
2001-12-29 17:13   ` Liddle Feesh
2001-12-29 17:14     ` Liddle Feesh
2001-12-29 17:39     ` Liddle Feesh
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox