Análisis y Diseño de Algoritmos                                                                                                      

Prof: Ing. Victor Garro

Asistente: Marco Elizondo Vargas

 

Listas Lineales

 

Introduccion Pilas y COLAS

 

Pilas y Colas

•         Los pilas y las colas son conjuntos de datos dinámicos en los que hay restricciones sobre el elemento que puede removerse.

•         En las pilas sólo se puede remover el elemento más recientemente insertado. Implementa así una política last-in, first-out o LIFO.

•         Las colas sólo pueden remover el elemento más antiguo del conjunto. Implementa una política first-in, first-out o FIFO.

 

PILAS

–        La operación de inserción es llamada aquí PUSH.

–        La operación eliminación es llamada POP.

–        No puede hacerse  POP de un stack vacío.

–        Si la implementación del stack posee un límite para el número de elementos y éste se excede, decimos que hay un overflow. También es un error.

–        Se incorpora la función TOP que retorna el valor más reciente sin modificar el stack.

 

Operaciones:

a)      t = pop(s) remueve el elemento superior de la pila s y lo retorna como valor de la funcion.

b)      Push(s,t): Agrega el elemento t al tope de la pilas

c)      Empty(s): returna True si la pila esta vacia y False en caso contrario

 

•         Const int MAX_ELEMENTS = 100;

•         typedef struct stack {
            int top;
            int element [MAX_ELEMENTS];
} STACK;

•         void MakeNull(STACK *S) {
            S->top=-1;
}

•         int Stack_Empty(STACK * S) {
            return (S->top == -1);
}

•         void Push( STACK *S, int x) {
     if  (S->top < MAX_ELEMENTS) {
            (*S).top++; 

                  (*S).element[(*S).top]=x;   /* pudo ser S->element [S->top]=x; */
                  /* o ambas en (*S).element[++(*S).top]=x; */

  }
}

•         int Pop (STACK *S) {
   if ((*S).top > -1) {  /* stack no vacío */
            return((*S).element[(*S).top--]);
}

•         int Top(STACK *S) {
            if (S->top > -1)
            return (S->element[S->top]);
}                    

        

 

COLAS

–        Operación Inserción es llamada Encolar

–        La operación eliminación es llamada desencolar.

–        Cada cola tiene una head (cabeza) y un tail (cola).

–        Se incorpora la función Head que retorna el valor más antiguo de la cola.

 

Implementacion de Cola con arreglo circular

 

•         Const int MAX_ELEMENTS = 100;

•         typedef struct queue {
    int head;  /* apunta al elemento más antiguo de la queue, el “primero” */
    int tail;     /* apunta elemento más recientemente ingresado, el de atrás */
    int count;  /* no. elementos en la cola. Permite distinguir cola vacía de llena */
    int element [MAX_ELEMENTS];
} QUEUE;

•         void MakeNull(QUEUE *Q) {
            Q->head=0;
            Q->tail=MAX_ELEMENTS-1;
            Q->count=0;
}

•         int Queue_Empty(QUEUE * Q) {
            return (Q->count == 0);
}

•         void Enqueue( QUEUE *Q, int x) {
            if  (Q->count++ < MAX_ELEMENTS) {
                        Q->tail= ++Q->tail%MAX_ELEMENTS;
                        Q->element[Q->tail] = x;

                  }
       }

•         int Dequeue (QUEUE *Q) {
            int aux=Q->head;
            if  (Q->count--  > 0) {  /* Queue no vacío */
                  Q->head= ++Q->head % MAX_ELEMENTS;
                 return((*Q).element[aux]);

                  }
      }

•         int Head(QUEUE *Q) {
            if (Q->count >0)
                return (Q->element[Q->head]);
}                    

 

Free Web Hosting