Banner Ad

    A    L    W    A    Y    S           D    E    S    I    R    E           T    O           L    E    A    R    N           S    O    M    E    T    H    I    N    G           U    S    E    F    U    L   

Technology and business

technology and business are becoming inextricably interwoven. I don't think anybody can talk meaningfully about one without the talking about the other

Arthur C. Clarke

Any sufficiently advanced technology is indistinguishable from magic.

Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions.

Softwares

Defect-free software does not exist.

Technology is like a fish. The longer it stays on the shelf, the less desirable it becomes.

Sunday, July 31, 2011

Stacks & Queues

Stacks & Queues


Stack ADT definition:
A stack is a linear sequence of data of the same type.  It can be likened to a stack of plates at a diner.  The plates are taken off in a "last in, first out" order.


operations of a stack:
they have top and bottom
can put on top and take off top ONLY


key words to remember:
push - to push is to place an item on the top of a stack.
pop - to pop from a stack is to remove an item from the top.
top - refers to the top of the stack.


Pop does not return the value of the top of stack.  It just removes it.


Example of Stack class:


class Stack
{
char ar[50];     // type of data in stack
int n;          // number of elements in stack


public:
     Stack();
void push(char);
void pop();
char top()const;
bool empty()const;
bool full()const;
int size()const;
};


/********************************/
Stack::Stack()
{
     n=0;     // says no elements in array
}
/********************************/
bool Stack::empty()
{
return (n==0);     // evaluates ==0 for true and != 0 for false
}
/********************************/
bool Stack::full()
{
     return (n==50);  // or use symbolic constant
}
/********************************/
void Stack::push(char c)
{
     if(n==50)
          return;     // stack is full
     // insert onto stack
     ar[n] = c;  // or optional ar[n++] = c
     n++;
}
/*********************************/
Stack::pop()
{
     if (empty)
return;
     n--;
}


Queue:  (FIFO or first in first out)
an abstract data type which is a sequence of data of the same type
it has a front and a back.
works well for list of things to do like print spoolers
array implementation is for a set size of queue
linked list implementation which are much more efficient


functions of a queue:
push( )         to push a value onto the queue.
pop( )          to pop a value off of the queue.
front( )         similar to top( ) in a stack so you can examine.


In an array implementation of a queue you can push something onto the front of the list and then push another element on.  You can keep track of the list size.  


Problem with the array implementation is that you can keep track of size but when you pull off the front, you have to move all other values down.  This takes time and resources.


Solution is to keep track of the first and last numbers in the queue.  As you add in, the back moves. And  as you pop things off, the front moves as well.  This is still a problem because you eventually run out of room in the queue.  Or… an even better solution to this problem is a circular queue.  This brings us to yet another new data structure:


deque:  (pronounced deck)
a deque is a linear data structure with a sequence of elements.  It is a special case of a queue has both a front and a back.  It is essentially a double ended queue.  The main difference is that you can push and pop off of either the front or back.

Related Posts Plugin for WordPress, Blogger...

your comments