Pagina 1 di 1

Problema con implementazione stack

Inviato: 30 maggio 2016, 16:24
da armando
Salve a tutti sapete dirmi dove sta l'errore in questo codice?Sto impazzendo :( grazie anticipatamente.

Stack.c

Codice: Seleziona tutto

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

struct Stack{
	int info;
	struct Stack *link;
}*head,*temp,*new_node,*first;

void create(struct Stack *head){		
	head=NULL;
}

int empty(struct Stack *head){	
	if(head==NULL){	
		return 1;
	}
	else{
		return 0;
	}
}

void push(struct Stack *head,int elem){
	if(!empty(head)){
		new_node=(struct Stack *)malloc(sizeof(struct Stack));
		new_node->info=elem;
		new_node->link=head;
		head=new_node; 
	}
	else{
		head->link=NULL;
		head->info=elem;
		temp=NULL;
	}
}

int view(struct Stack *head){
	first=head;
	while(head!=NULL){
		printf("%d\n",first->info);
		first=first->link;
	}	
}

int pop(struct Stack *head){
	int elem;
	temp=NULL;		
	temp=head;
	if(temp == NULL){	
		printf("Stack Vuoto!\n");
	}
	else{		
		elem=temp->info;
		free(head);
		temp=temp->link;
		head= temp;
		return elem;
		temp=NULL;
	}			
}
stack.h

Codice: Seleziona tutto

int empty();

void create();

void push();

int pop();

int view();
main.c

Codice: Seleziona tutto

#include<stdio.h>
#include"stack.h"

int main(){
	struct Stack *pila1;
	create(&pila1);
	int e=5;
	push(&pila1,e);
	push(&pila1,15);
	int a;
	a=pop(&pila1);
	int b=pop(&pila1);
	printf("%d\n",a);
	printf("%d\n",b);	
}

Re: Problema con implementazione stack

Inviato: 30 maggio 2016, 18:19
da TheSaint
Beh, non vedo la funzione create().

Re: Problema con implementazione stack

Inviato: 30 maggio 2016, 20:01
da armando
Ciao TheSaint, scusa in che senso non vedi la funzione create()? Comunque ho risolto modificando il codice in questo modo

Codice: Seleziona tutto

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

struct Stack{
	int info;
	struct Stack *link;
}*head;

typedef struct Stack *stack;
void create(stack *head){		
	*head=(struct Stack *)malloc(sizeof(struct Stack));	
	*head==NULL;
}

int empty(stack *head){	
	if(*head==NULL){	
		return 1;
	}
	else{
		return 0;
	}
}

void push(stack *head,int elem){
	struct Stack *new_node;
	new_node=(struct Stack *)malloc(sizeof(struct Stack));	
	if(!empty(head)){
		new_node->info=elem;
		new_node->link=*head;
		*head=new_node; 
	}
	else{
		(*head)->link=NULL;
		(*head)->info=elem;		
	}
}

int view(stack *head){
	struct Stack *first;
	first=(struct Stack *)malloc(sizeof(struct Stack));	
	first=*head;
	while(first->link!=NULL){
		printf("%d\n",first->info);
		first=first->link;
	}	
}

int pop(stack *head){
	int elem;
	struct Stack *temp;
	temp=NULL;		
	temp=*head;
	if(temp == NULL){	
		printf("Stack Vuoto!\n");
	}
	else{		
		elem=temp->info;
		temp=temp->link;
		free(*head);
		*head=temp;
		return elem;
		temp=NULL;
	}			
}
Pero' adesso ho un'altro problema quando faccio il merge tra due stack, un solo valore non me lo copia e, nel ciclo while sembra che esca dopo la condizione che gli ho dato, non quando si verifica.Adesso posto il codice del main. Grazie ancora anticipatamente

Codice: Seleziona tutto

#include<stdio.h>
#include"stack.h"

int main(){
	typedef struct Stack *stack;
	stack *pila1,*pila2,*pila3;
	int p1,p2;
	create(&pila1);
	create(&pila2);
	create(&pila3);
	push(&pila2,51);
	push(&pila2,42);
	push(&pila2,18);
	push(&pila2,15);
	push(&pila1,74);
	push(&pila1,71);
	push(&pila1,58);
	push(&pila1,44);
	push(&pila1,17);
	push(&pila1,16);
	push(&pila1,11);
	push(&pila1,8);	
	p1=pop(&pila1);
	p2=pop(&pila2);	
	while((!empty(&pila1)) && (!empty(&pila2))){			
		if(p1 < p2){
			push(&pila3,p1);
			p1=pop(&pila1);			
		}
		else if(p1 > p2){
			push(&pila3,p2);
			p2=pop(&pila2);
			}	
	}
	if(empty(&pila1)){
		while(!empty(&pila2)){		
			push(&pila3,pop(&pila2));
		}
	}
	else if(empty(&pila2)){
		while(!empty(&pila1)){
			push(&pila3,pop(&pila1));
		}
	}
	view(&pila3);		
}
Questo invece e' l'output dell'esecuzione

Codice: Seleziona tutto

root /home/esercizi # ./main
0
74
71
51
44
42
18
17
16
15
11
8

Re: Problema con implementazione stack

Inviato: 31 maggio 2016, 8:11
da TheSaint
armando ha scritto:Ciao TheSaint, scusa in che senso non vedi la funzione create()?
Ora vedo che c'è una dichiarazione di create, nella struct stack.
Poi il resto sono ai primordi del linguaggio e faccio fatica a comprenderlo. In particolare manca molto i commenti, molto utili quando si presenta il codice ad altri.