Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Languages / C# / September 2007

Tip: Looking for answers? Try searching our database.

How to do?: Stack of limited size containing unique items.

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
mark4asp - 28 Sep 2007 15:29 GMT
Stack of limited size containing unique items?

Hi guys,

How would I implement a stack of limited size containing unique items?

For example. Suppose my stack has [3,5]. I add 2 to it and it is now
[3,5,2].  Now I want to add 5 to the unique item stack so it should
now be: [3,2,5]. The item added is pulled from the stack, then pushed.
The stack should also have a maximum size of 4 items. I add 4 and 7
respectively. It becomes: [3,2,5,4] then, after adding 7: [2,5,4,7].
The first item is dropped when the stack is at maximum capacity and a
new item added.  Should this be a queue rather than a stack?  I said
'stack' because, apart from the limited size behavior of the oldest
item being dropped in favour of the new item, I want it to have the
FILO behavior of a conventional stack.
Göran Andersson - 28 Sep 2007 16:01 GMT
> Stack of limited size containing unique items?
>
[quoted text clipped - 12 lines]
> item being dropped in favour of the new item, I want it to have the
> FILO behavior of a conventional stack.

Neither a Stack<> or a Queue<> has any method for removing an item in
the middle of the collection, so they aren't really useful in this case.

I would suggest that you use a List<> or array as internal storage in a
class, and just implement the methods you need. The List<> class has the
methods Contains and RemoveAt that might be useful, but as your
collection has a fixed maximum size, using an array might feel like a
more straight forward solution.

Signature

Göran Andersson
_____
http://www.guffa.com

mark4asp - 28 Sep 2007 16:07 GMT
> Stack of limited size containing unique items?
>
[quoted text clipped - 12 lines]
> item being dropped in favour of the new item, I want it to have the
> FILO behavior of a conventional stack.

OK, figured it.

using System;
using System.Collections.Generic;

public class StackLimited
{
    int _maxSize;
    List<int> _stack;
    public StackLimited(int maxSize)
    {
        _maxSize = maxSize;
        _stack = new List<int>(maxSize);
    }
    public void Push(int item)
    {
        if(_stack.Contains(item))
            _stack.Remove(item);
        else
            if (_stack.Count == maxSize)
            {
                Pop();
            }
        _stack.Insert(0, item);
    }
    public int Pop()
    {
        if (_stack.Count > 0)
        {
            data = _stack[0];
            _stack.RemoveAt(0);
        }
    }
}
Göran Andersson - 28 Sep 2007 16:30 GMT
>> Stack of limited size containing unique items?
>>
[quoted text clipped - 35 lines]
>             {
>                 Pop();

But that will remove the most recent item, not the oldest one.

>             }
>         _stack.Insert(0, item);
[quoted text clipped - 8 lines]
>     }
> }

Signature

Göran Andersson
_____
http://www.guffa.com


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.