Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94

    Code implementate con array

    Salve a tutti,avrei un piccolo problema.....la coda!
    Devo implementare in C la gestione della struttura dinamica coda mediante array,l'ho implementata mediante linked list ed è stato più semplice.....ora ho qlc problemino................potete aiutarmi!!!!!!!!!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94

    [C]

    Vi prego....un aiutino.Forse sono stata troppo vaga...allora CODA IMPLEMENTATA CON ARRAY

    1)per l'inserimento,faccio nel main il controllo se la coda è piena

    puntTesta=(puntCoda+1)% LUN_CODA --->giusto???
    se la coda nn è piena inserisco (ecco la function ):

    void inserimentoCoda(int *coda, int *pCoda,int elemento)
    {
    *pCoda=(*pCoda+1)% LUN_CODA;
    coda[*pCoda]=elemento; ------------>qui credo ci sia qlc che non va!!!?!?!?!!
    *pCoda++;
    }

    2)per l'estrazione,controllo prima se la coda è vuota

    se puntTesta=0 e puntCoda=1 coda vuota -------->è questo il controllo???

    3)per la visualizzazione avrei pensato ad un for (i) che scorre da puntTesta puntCoda,ad ogni passo visualizza arrayCoda[i]-------->è fattibile come idea?!!!



    ora credo di essere stata più dettagliata sui miei dubbi.......vi prego indirizzatemi se sto facendo bene.........GRAZIE MILLE

  3. #3
    Io farei così
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define Q_LEN 10 // Lunghezza della coda da cambiare a piacimento
    
    int q[Q_LEN];        // array coda
    int index;
    void qInsert(int);
    int  qExtract(void);
    void qShowQ(void);
    
    void main()
    {
    
        index=0;     // Inizializziamo l'indice al primo posto libero
        // Facciamo qualche opereazione di inserimento e di estrazione
        qExtract();  // <-- Coda vuota
        qInsert(1);
        qInsert(2);
        qInsert(3);
        qInsert(4);
        qInsert(5);	
        qInsert(6);
        qInsert(7);
        qInsert(8);
        qInsert(9);
        qInsert(10);
        qInsert(11); // <-- Coda piena
        qShowQ();
        printf("%d\n",qExtract());
        qShowQ();
        qInsert(11);
        qShowQ();
        system("pause");
    }
    
    void qInsert(int elemento)
    {
    	if (index==Q_LEN)
    		printf("Coda piena !\n");
    	else
    	{
    		q[index]=elemento;
    		index++;
    	}
    }
    
    int qExtract(void)
    {
    	if (index==0)
    		printf("Coda vuota !\n");
    	else
    		index--;
    	return q[index];
    }
    
    void qShowQ(void)
    {
    	int i;
    	for(i=0;i<index;i++)
    		printf("%d\n",q[i]);
    }
    Saluti

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94
    grazie mille,ma io devo usare i puntatori in più devo considerare la coda "circolare"...forse prima non mi son spiegata bene...ma sto programma mi sta esaurendo

    Un dubbio: la tua function di estrazione estrae in testa alla coda?

  5. #5
    Si , in effetti quello che ho implementato è una pila , in quanto l'operazione di estrazione di un elemento avveniva in coda . Adesso dovrebbe funzionare .
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define Q_LEN 10 	// Lunghezza della coda da cambiare a piacimento
    
    int q[Q_LEN];   	             // array della coda
    int qhead;		// indice della testa
    int qtail;			// indice della coda
    int qtot;			// numero di elementi presenti in coda
    void qInsert(int);
    int  qExtract(void);
    void qShowQ(void);
    
    void main()
    {
        // Inizializziamo gli indici di testa e di coda
        qhead=0;
        qtail=0;
        qtot=0;
        // Facciamo qualche opereazione di inserimento e di estrazione
        qExtract();  	// <-- Coda vuota
        qInsert(1);
        qInsert(2);
        qInsert(3);
        qInsert(4);
        qInsert(5);	
        qInsert(6);
        qInsert(7);
        qInsert(8);
        qInsert(9);
        qInsert(10);
        qInsert(11); // <-- Coda piena
        qShowQ();
        printf("\n");
        printf("%d\n\n",qExtract());
        qShowQ();
        printf("\n");
        qInsert(11);
        qShowQ();
        system("pause");
    }
    
    
    void qInsert(int elemento)
    {
    	if (qtot==Q_LEN)
    		printf("Coda piena !\n");
    	else
    	{
    		q[qtail]=elemento;
    		qtail++;
    		if (qtail>Q_LEN) 
    			qtail=0;
    		qtot++;
    	}
    }
    
    
    int qExtract(void)
    {
    	int tmp;
    
    	if (qtot==0)
    		printf("Coda vuota !\n");
    	else
    	{
    		tmp=q[qhead];
    		qhead++;
    		if (qhead>Q_LEN)
    			qhead=0;
    		qtot--;
    	}
    	return tmp;
    }
    
    
    void qShowQ(void)
    {
    	int i;
    	i=qhead;
    	while (i!=qtail)
    	{
    		printf("%d\n",q[i]);
    		i++;		
    		if (i>Q_LEN)
    			i=0;
    	}
    }
    Saluti
    P.S. Usare i puntatori per cosa ? :master:

  6. #6
    Utente di HTML.it L'avatar di eclips
    Registrato dal
    Apr 2005
    Messaggi
    48
    Originariamente inviato da haidi8
    grazie mille,ma io devo usare i puntatori in più devo considerare la coda "circolare"...forse prima non mi son spiegata bene...ma sto programma mi sta esaurendo

    Un dubbio: la tua function di estrazione estrae in testa alla coda?

    Con "coda circolare" intendi una lista sequenziale di tipo:

    codice:
    typedef int index;
    
    void init(struct list *ptr, index size);/*inizializzazione delle variabili dentro la struct*/
    //operazioni sulla lista
    bool pre_insert(struct list *ptr,int value);/*inserimento in testa alla lista*/      
    void visit(struct list *ptr);/* visita*/
    bool search(struct list *ptr, int value);/* ricerca elemento preso in input*/
           
    int main(void)
    {
      struct list lista;
      index dim;
      int value;
      int scelta;
     static bool ins;
      
      scelta = 1;
      ins = true;
    
      printf("Dammi la dimensione della lista: ");
      scanf("%d", &dim);
      printf("\n");
      
      init(&lista, dim);
      while(scelta != 0){
           
           printf("\n\n1) Inserisci un nuovo valore\n");
           printf("2) Visualizza il contenuto della lista\n");
           printf("4) Ricerca di un elemento\n");
           printf("0) Esci\n");
           printf("Scegli un opzione: ");
           scanf("%d",&scelta);
           
           switch(scelta){
                          case 1:
                                 
                                 if(ins==false)
                                    printf("\nLista piena");
                                 else
                                    {
                                        printf("\nInserisci valore: ");
                                        scanf("%d",&value);
                                        ins = pre_insert(&lista, value);
                                    }
                          break;
                          case 2:
                                 visit(&lista);
                          break;
                          case 4:
                                 printf("\nInserisci valore: ");
                                 scanf("%d",&value);
                                 if(search(&lista, value) == false)
                                    printf("\nValore non presente");
                                 else
                                    printf("\nValore %d presente", value);
                          break;
           }
      }
      return 0;
    }
    
    void init(struct list *ptr, index size){
         
         ptr->size = size;
         ptr->head = 0;
         ptr->tail = 0;
         ptr->buffer = (int*) malloc(sizeof(int*) * ptr->size);
    }
    
    
    bool pre_insert(struct list *ptr,int value){
         
        if(ptr->head != -(ptr->tail + (ptr->size - 1)) % ptr->size){
                     ptr->head = (ptr->head - 1) % ptr->size;
                     ptr->buffer[ptr->head] = value;
                     
                     return true;
        }
        else
                     return false;
    }
    
    void visit(struct list *ptr){
         
         index position;
         
         position = ptr->head;
         printf("Valori della lista: \n");
         while(position != ptr->tail){
                        printf("%d ",ptr->buffer[position]);
                        position=(1 + position) % ptr->size;
         }
    }
    
    bool search(struct list *ptr, int value){
         
         bool found;
         index position;
         
         found = false;
         position = ptr->head;
         
         while((found == false) && (position != ptr->tail)){
              if(ptr->buffer[position]==value)
                 found = true;
              else
                 position = (position+1) % ptr->size; 
         }
         return found;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.