PILE E CODE. Pile (stack):

Похожие документы
Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Struttura dati astratta Coda

La struttura dati CODA

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Contenitori: Pile e Code

Strutture Dinamiche. Fondamenti di Informatica

Strutture dati dinamiche in C (II)

Programmazione I - Laboratorio

Linguaggio C. Esercizio 1

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Il tipo di dato astratto Pila

I tipi di dato astratti

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

I puntatori e l allocazione dinamica di memoria

Informatica 1. Prova di recupero 21 Settembre 2001

Laboratorio di Informatica

Informatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

Rappresentazione di liste mediante puntatori in linguaggio C

Alberi e alberi binari I Un albero è un caso particolare di grafo

Esercizio 1: Puntatori impiegati che sono manager

Esercizio 1: funzione con valore di ritorno di tipo puntatore

I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese

PROGRAMMI LINGUAGGIO C

Esercizio: gestione di un conto corrente

Alberi ed Alberi Binari

Esempio di Prova Scritta

FONDAMENTI DI INFORMATICA

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Alberi binari e alberi binari di ricerca

Corso di Informatica 1 (IN1) Tutorato n. 11

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 4A di Martedì 21 Giugno 2011 tempo a disposizione 2h

Laboratorio di Algoritmi e Strutture Dati

In questa lezione Strutture dati elementari: Pila Coda

Puntatori a Funzioni e Callback. Massimo Benerecetti

Lezione 9 Alberi binari di ricerca

Implementazione di Liste puntate

Esercitazione 12. Esercizi di Ricapitolazione

Lezione 12 Tabelle Hash

PROGRAMMAZIONE AVANZATA JAVA E C. Massimiliano Redolfi. Lezione 7: Code, Stack, Liste PAJC. Ricerca. prof. Massimiliano Redolfi PAJC

Compito di Fondamenti di Informatica

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Esercizio 1 Liste: calcolo perimetro di un poligono

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica

Perché il linguaggio C?

Implementazione Java di un ADT

Appello di Informatica B

Il linguaggio C. Notate che...

CREARE UNA LIBRERIA IN C

Транскрипт:

PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack): Rappresentazione sequenziale di pile (mediante vettore): Vettore di N componenti. Variabile top, memorizza l indice dell elemento affiorante (top=-1, pila vuota) 0 1 2 18 top 3 Multi-insiemi gestiti con disciplina LIFO (Last-In-First- Out): una eliminazione ha per oggetto l elemento che è stato inserito per ultimo. N-1 Come tipo di dato astratto <S,Op,C>: Dopo il push di 21: S=(pila, elem, boolean) dove pila è il dominio di interesse; Op = (top,push,pop,test-vuota) top: pila elem push: elem pila pila pop: pila pila test-vuota: pila boolean 0 1 N-1 2 18 21 top 4 C = {pila-vuota Per la realizzazione si può utilizzare un vettore o una lista. FONDAMENTI DI INFORMATICA II Strutture dati: pile e code 1 FONDAMENTI DI INFORMATICA II Strutture dati: pile e code 2

Rappresentazione collegata di pile (mediante lista): È analoga al caso di rappresentazione collegata di una lista (+ disciplina LIFO). Inserimenti e cancellazioni sempre dalla testa della lista. Il puntatore radice della lista punta all elemento affiornate (top). Se NULL, pila vuota. Date le corrispondenze: push ---> cons pop ---> tail top ---> head test-pila-vuota ---> empty il tipo stack viene realizzato in modo immediato sulla base del modulo list (basta ridefinire i nomi delle operazioni). Code: Multi-insiemi gestiti con disciplina FIFO (First-In-First- Out): una eliminazione ha per oggetto l elemento che è stato inserito per primo. Come tipo di dato astratto <S,Op,C>: S=(coda, elem, boolean) dove coda è il dominio di interesse; Op = (primo, in, out, test-coda-vuota) primo: coda elem in: elem coda coda out: coda coda test-coda-vuota: coda boolean C = {coda-vuota Le possibili rappresentazioni (sequenziale o collegata) sono analoghe a quelle delle pile, ma qui conviene avere accesso sia al primo elemento (per l'estrazione) che all'ultimo (per l'inserimento). FONDAMENTI DI INFORMATICA II Strutture dati: pile e code 3 FONDAMENTI DI INFORMATICA II Strutture dati: pile e code 4

Rappresentazione collegata (liste): Coda C: 1 4 3 in(,c): /* QUEUE INTERFACE - file queue.h*/ #include "el.h" typedef struct list_element { el_type value; struct list_element *next; item; typedef item* punt; typedef struct {punt primo; punt ultimo; queue; typedef int boolean; /* PROTOTIPI DI FUNZIONE (extern) */ queue emptyqueue(void); boolean test_coda_vuota(queue); el_type top(queue); queue out(queue); queue in(el_type, queue); void showqueue(queue); 1 4 3 out(c): 4 3 Si utilizzano due variabili di tipo puntatore (first, last). Coda vuota, rappresentata da first==null, last==null. FONDAMENTI DI INFORMATICA II Strutture dati: pile e code FONDAMENTI DI INFORMATICA II Strutture dati: pile e code

/* QUEUE IMPLEMENTATION - file queue.c */ #include <stdio.h> #include <stdlib.h> #include "queue.h" /* OPERAZIONI PRIMITIVE */ queue emptyqueue(void) { queue C; C.primo=NULL; C.ultimo=NULL; return(c); ; boolean test_coda_vuota(queue C) { return ( (C.primo==NULL) && (C.ultimo==NULL)); ; el_type top(queue C) {if (test_coda_vuota(c)) { printf("coda vuota\n"); else { return (C.primo->value); queue out(queue C) {if (test_coda_vuota(c)) { printf("coda vuota\n"); else { C.primo=C.primo->next; return (C); queue in(el_type e, queue C) {item* p; p=(item *)malloc(sizeof(item)); p->value=e; p->next=null; if (C.primo==NULL) {C.primo=p; C.ultimo=p; else {C.ultimo->next=p; C.ultimo=C.ultimo- >next; return(c); /* OPERAZIONI NON PRIMITIVE */ void showqueue(queue C) {item* l=c.primo; printf("["); while (l!=null) { printf("%d",l->value); l=l->next; if (l!=null) printf(", "); printf("]\n"); FONDAMENTI DI INFORMATICA II Strutture dati: pile e code 7 FONDAMENTI DI INFORMATICA II Strutture dati: pile e code 8

/* FILE PROGRAMMA */ #include "queue.h" void main(void) {queue coda; /* dich. dato */ coda=emptyqueue(); coda=in(3,coda); coda=in(,coda); coda=in(7,coda); coda=out(coda); FONDAMENTI DI INFORMATICA II Strutture dati: pile e code 9