PDA

Visualizza la versione completa : [C] Stampare elementi di una coda


Oo.T.oO
25-07-2012, 17:50
quando provo a stampare gli elementi della coda, mi stampa correttamente solo l'ultimo inserito .. dov' è l'errore?



#include <stdio.h>
#include <stdlib.h>


struct SCoda{
int n;
int front;
int back;
int capienza;
int *array;
};
typedef struct SCoda TCoda;

TCoda Crea_Coda(int capienza);
void Aggiungi_Elemento(TCoda *coda,int x);
int Prelievo_Elemento(TCoda *coda);


int main(int argc, char *argv[])
{
TCoda coda;
int i,x,n,ext;

coda=Crea_Coda(5);

printf("Quanti elementi vuoi inserire?");
scanf("%d",&n);

for(i=0;i<n;i++){
printf("Elemento da inserire:");
scanf("%d",&x);
Aggiungi_Elemento(&coda,x);}
for(i=0;i<n;i++){
printf("%d ",coda.array[i]);}



system("PAUSE");
return 0;
}


TCoda Crea_Coda(int capienza){
TCoda coda;
coda.n=0;
coda.back=0;
coda.front=0;
coda.capienza=capienza;
coda.array=(int*)malloc(sizeof(int)*capienza);
return coda;}

void Aggiungi_Elemento(TCoda *coda,int x){
coda->array[coda->front]=x;
coda->back++;
coda->n++;}
int Prelievo_Elemento(TCoda *coda){
int x;
x=coda->array[coda->front];
coda->front++;
coda->n--;
return x;}

Scara95
25-07-2012, 18:07
Inserisci gli elementi sempre nello steso punto!

Oo.T.oO
25-07-2012, 18:14
Perchè nello stesso punto?
Ho incrementato back nella funzione aggiungi_Elemento..

a giusto devo incrementare front!!!!!!!!!!

Oo.T.oO
25-07-2012, 18:35
Ora ho un altro problema:
stampa la pila senza l'elemento in coda anzichè senza l'elemento in testa...


#include <stdio.h>
#include <stdlib.h>


struct SCoda{
int n;
int front;
int back;
int capienza;
int *array;
};
typedef struct SCoda TCoda;

TCoda Crea_Coda(int capienza);
void Aggiungi_Elemento(TCoda *coda,int x);
int Prelievo_Elemento(TCoda *coda);


int main(int argc, char *argv[])
{
TCoda coda;
int i,x,n,ext;

coda=Crea_Coda(5);

printf("Quanti elementi vuoi inserire?");
scanf("%d",&n);

for(i=0;i<n;i++){
printf("Elemento da inserire:");
scanf("%d",&x);
Aggiungi_Elemento(&coda,x);}
for(i=0;i<n;i++){
printf("%d ",coda.array[i]);}

printf("\n");
ext=Prelievo_Elemento(&coda);
printf("il numero estratto e':%d\n",ext);

printf("Ora la coda e' formata da\n:");
for(i=0;i<coda.n;i++){
printf("%d ",coda.array[i]);}
printf("\n");



system("PAUSE");
return 0;
}


TCoda Crea_Coda(int capienza){
TCoda coda;
coda.n=0;
coda.back=0;
coda.front=0;
coda.capienza=capienza;
coda.array=(int*)malloc(sizeof(int)*capienza);
return coda;}

void Aggiungi_Elemento(TCoda *coda,int x){
coda->array[coda->back]=x;
coda->back++;
coda->n++;}

int Prelievo_Elemento(TCoda *coda){
int x;
x=coda->array[coda->front];
coda->front++;
coda->n--;
return x;}

Who am I
27-07-2012, 04:09
Il motivo per cui ti stampa un elemento in meno è che prima di scorrere la coda chiami la funzione Prelievo_Elemento, che hai scritto così:



int Prelievo_Elemento(TCoda *coda){
int x;
x=coda->array[coda->front];
coda->front++;
coda->n--;
return x;}


Per cui n non ha più il valore di prima.
Se ad esempio hai inserito 5 elementi, hai prelevato un elemento e ti stampa i primi 4.
Togli l' istruzione coda->n-- in Prelievo_Elemento e quando scorri la lista parti da coda.front anziché zero:



for(i=coda.front;i<coda.n;i++)
{
printf("%d ",coda.array[i]);
}

Loading