Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #19613

Re: Creating a new stack from an exisiting one.

From "Pascal J. Bourguignon" <pjb@informatimago.com>
Newsgroups comp.lang.java.programmer, comp.programming
Subject Re: Creating a new stack from an exisiting one.
Date 2012-11-04 00:49 +0100
Organization Informatimago
Message-ID <874nl6memf.fsf@informatimago.com> (permalink)
References <f6d6cbfd-8152-4d92-92b5-89a18ac989a5@tr7g2000pbc.googlegroups.com> <0.73472d82415d5353822e.20121103155132GMT.87mwyyvg57.fsf@bsb.me.uk> <b227ba50-ccbc-4da0-9f6a-31bb809f329d@ah9g2000pbd.googlegroups.com>

Cross-posted to 2 groups.

Show all headers | View raw


Chad <cdalten@gmail.com> writes:

> On Nov 3, 8:51 am, Ben Bacarisse <ben.use...@bsb.me.uk> wrote:
>> Chad <cdal...@gmail.com> writes:
>> > I have stack like the following..
>>
>> > [1, 4, 10, 20]
>>
>> > What I need to do is pop the top item off the stack such that it looks
>> > like the following..
>>
>> > [1, 4, 10] [20]
>>
>> > Then, starting at [20], I need to be able to push the numbers 78 and
>> > 99 onto this stack such that the output looks like
>>
>> > [1, 4, 10] [20, 78, 99]
>>
>> > Can this be done without creating a new stack? If so how? I just need
>> > some general idea.
>>
>> You seem to be using [...] to denote a stack so what you want as the
>> result clearly has two stacks.  That seems to suggest you must make
>> another one (unless there is a spare one lying around for some reason).
>>
>>
>>
>>
>>
>> >  Here is what I came up with so far..
>>
>> > import java.util.*;
>>
>> > public class funcTest {
>>
>> >     public static void main(String[] args) {
>> >         Stack<Integer> stack = new Stack<Integer>();
>> >         stack.add(1);
>> >         stack.add(4);
>> >         stack.add(10);
>> >         stack.add(20);
>>
>> >         System.out.println(stack);
>>
>> >         Object temp = stack.pop();
>>
>> >         System.out.println(stack + " " + "["+ temp + "]");
>>
>> >         //This part from here on down doesn't work
>> >         /*
>> >         stack = (Stack)temp;
>> >         stack.push(78);
>> >         stack.push(99);
>>
>> >         System.out.println(stack + " " + "["+ temp + "]");
>> >          *
>> >          */
>> >     }//end main()
>>
>> > }
>>
>> This just deepens the mystery.
>>
>
> That what I thought. However, I don't think so. Let me elaborate. This
> is part of a much much larger software project. The part is question
> is the RunTimeStack module. In this module, we have one stack which is
> called runStack. This is an ArrayList that is supposed to hold the
> data pushed onto the stack. In other words, after I push the numbers
> onto the stack, it would look something like..
>
> [1, 4, 10, 20]
>
> There is another stack, of type Stack, that is called framePointers.
> This holds the current offset. So if I have something like f(3) in the
> source code, the corresponding runTimeStack is supposed to go
> something like
>
> LIT 3  //private machine code
> [1, 4, 10, 20, 3]
>
> ARGS 1 //ditto
> [1, 4, 10, 20] [3]
>
> CALL F<<20>>
> [1, 4, 10, 20] [3]
>
>
>
> I don't see how to create the new "stack" when I'm only given one
> stack to hold the data and another to hold the offsets.


Well, pure stacks have only those operations:

    (empty-stack) --> stack
    (push element stack) --> stack
    (pop stack) --> element
    (is-empty-stack? stack) --> boolean

If you are considering this kind of pure stack, then you must indeed use
two stacks.


But when implementing programming languages, we don't use pure stacks
usually.  We have a data structure that's more complex, with indeed
frame pointers, and ways to refer frame members below and above frame
pointers, in addition to elements below the top of the stack.

It's more like:

    (empty-stack) --> stack
    (push element stack) --> stack
    (pop stack) --> element
    (is-empty-stack? stack) --> boolean
    (push-frame stack) --> stack-frame
    (pop-frame stack-frame) --> stack
    (stack-ref stack-frame offset) --> element
    (stack-set! stack stack-frame offset value) --> stack

You can implement that with an array and an index to the "top of stack",
and represent the stack frames as indices inside this array.


-- 
__Pascal Bourguignon__
http://www.informatimago.com

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Creating a new stack from an exisiting one. Chad <cdalten@gmail.com> - 2012-11-03 07:45 -0700
  Re: Creating a new stack from an exisiting one. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-11-03 15:51 +0000
    Re: Creating a new stack from an exisiting one. Chad <cdalten@gmail.com> - 2012-11-03 09:22 -0700
      Re: Creating a new stack from an exisiting one. markspace <-@.> - 2012-11-03 11:20 -0700
      Re: Creating a new stack from an exisiting one. "BartC" <bc@freeuk.com> - 2012-11-03 18:58 +0000
      Re: Creating a new stack from an exisiting one. "Pascal J. Bourguignon" <pjb@informatimago.com> - 2012-11-04 00:49 +0100
      Re: Creating a new stack from an exisiting one. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-11-04 00:44 +0000
        Re: Creating a new stack from an exisiting one. "Pascal J. Bourguignon" <pjb@informatimago.com> - 2012-11-04 13:14 +0100
          Re: Creating a new stack from an exisiting one. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-11-04 12:48 +0000
            Re: Creating a new stack from an exisiting one. Thomas Richter <thor@math.tu-berlin.de> - 2012-11-04 14:14 +0100
              Re: Creating a new stack from an exisiting one. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-11-04 15:38 +0000
            Re: Creating a new stack from an exisiting one. "Pascal J. Bourguignon" <pjb@informatimago.com> - 2012-11-04 14:41 +0100
          Re: Creating a new stack from an exisiting one. "BartC" <bc@freeuk.com> - 2012-11-04 14:11 +0000
            Re: Creating a new stack from an exisiting one. "Pascal J. Bourguignon" <pjb@informatimago.com> - 2012-11-04 16:00 +0100
          Re: Creating a new stack from an exisiting one. markspace <-@.> - 2012-11-04 11:02 -0800
          Re: Creating a new stack from an exisiting one. Martin Gregorie <martin@address-in-sig.invalid> - 2012-11-04 19:56 +0000
    Re: Creating a new stack from an exisiting one. Jeff Higgins <jeff@invalid.invalid> - 2012-11-03 16:46 -0400
      Re: Creating a new stack from an exisiting one. Jeff Higgins <jeff@invalid.invalid> - 2012-11-04 08:22 -0500
        Re: Creating a new stack from an exisiting one. Jeff Higgins <jeff@invalid.invalid> - 2012-11-04 11:30 -0500
          Re: Creating a new stack from an exisiting one. Jeff Higgins <jeff@invalid.invalid> - 2012-11-04 19:40 -0500
  Re: Creating a new stack from an exisiting one. Lew <lewbloch@gmail.com> - 2012-11-03 16:02 -0700

csiph-web