Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #19613
| 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.
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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