Vezana lista,unija

poruka: 4
|
čitano: 1.595
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Vezana lista,presjek

ja se ispricavam ako je nesto slicno bilo vec među temama...uglavnom vjezbam jedan zadatak ,i on nece da radi...ono sta trebam napravit je presjek dviju listi...

ovo je ono sto sam ja napisala,ako neko moze pomoc bila bi zahvalna :)

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

typedef struct broj * br;

 

struct broj

{

int b;

br next;

 

};

void dodaj1(br p1)

{

printf("dodaj elemente u prvu listu\n");

br temp;

temp=(br)malloc(sizeof(struct broj));

printf("Unesite broj :");

scanf("%d",&temp->b );

temp->next=p1->next;

p1->next=temp;

 

 

}

void dodaj2(br p2)

{

printf("dodaj elemente u drugu listu\n");

br temp;

temp=(br)malloc(sizeof(struct broj));

printf("Unesite broj :");

scanf("%d",&temp->b );

temp->next=p2->next;

p2->next=temp;

 

 

}

void ispis1(br p1)

{

while(p1!=NULL)

{

printf("%d \n",p1->b);

p1=p1->next;

 

}

}

void ispis2(br p2)

{

while(p2!=NULL)

{

printf("%d \n",p2->b);

p2=p2->next;

 

}

 

}

void presjek(br p1,br p2,br p)

{

 

br temp;

while(p1!=NULL && p2!=NULL)

{

if(p1->b == p2->b)

{

temp=(br)malloc(sizeof(struct broj));

 

temp->b=p1->b;

temp->next=p->next;

p->next=temp;

 

p1=p1->next;

p2=p2->next;

 

p=p->next;

}

 

 

else if(p2->b < p1->b)

{

p2=p2->next;

 

 

}

 

else

p1=p1->next;

 

 

 

}

 

 

}

void ispisp(br p)

{

printf("\n");

 

p = p->next;

 

while(p != NULL)

{

printf("\t%d", p->b);

p = p->next;

}

 

 

printf("\n");

 

 

}

 

void main()

{

struct broj p1;

struct broj p2;

p1.next=NULL;

p2.next=NULL;

struct broj p;

p.next=NULL;

char izbor=0;

 

 

while(izbor!='k')

{

printf("unesite A za dodaj u prvu,B za dodaj u drugu,C za ispis prve,D za ispis druge,E za uniju:\n");

scanf(" %c", &izbor);

 

switch(izbor)

{

case 'a':

dodaj1(&p1);

break;

 

 

case 'b':

dodaj2(&p2);

break;

 

case 'c':

ispis1(p1.next);

break;

case 'd':

ispis2(p2.next);

break;

case 'e':

presjek(&p1,&p2,&p);

break;

case 'f':

ispisp(p.next);

break;

case 'k':

printf("Kraj");

break;

default:

printf("pogresan odabir\n");

 

 

 

 

}

 

}

 

 

}

 

 
0 0 hvala 0
13 godina
offline
Vezana lista,unija

Kôd je veoma neuredan, evo tu sam ga uredio:


http://pastebin.com/4q2vBT8s

Ako joj neko želi pomagati neka tu pogleda, intedndiran i ukonjeni ovi brojni break-ovi.

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Vezana lista,presjek

Ovako nešto?

 

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

typedef struct broj
{
    int b;
    struct broj *next;
} BROJ, *PBROJ;

PBROJ dodaj(PBROJ p, int broj)
{
    PBROJ temp=(PBROJ)calloc(1, sizeof(BROJ));
    temp->b=broj;

    if (p!=NULL)
        temp->next=p;

    return temp;
}

void ispis(PBROJ p)
{
    for (p; p!=NULL; p=p->next)
        printf("%d \n", p->b);
}

PBROJ presjek(PBROJ p1, PBROJ p2)
{
    PBROJ presjek=NULL, p1t, p2t, pt;
    int pronaden=0;

    for (p1t=p1; p1t!=NULL; p1t=p1t->next)
    {
        for (p2t=p2; p2t!=NULL; p2t=p2t->next)
        {
            if (p1t->b==p2t->b)
            {
                pronaden=0;
                for (pt=presjek; pt!=NULL; pt=pt->next)
                    if (pt->b==p1t->b)
                        pronaden=1;

                if (pronaden==0)
                    presjek=dodaj(presjek, p1t->b);
            }
        }

    }

    return presjek;
}

int main()
{
    PBROJ p1=NULL, p2=NULL, p=NULL, temp;
    char izbor=0;
    int broj;

    while (izbor!='k')
    {
        printf("unesite A za dodaj u prvu,B za dodaj u drugu,C za ispis prve,D za ispis druge,E za uniju:\n");
        scanf(" %c", &izbor);

        switch (izbor)
        {
            case 'a':
                printf("dodaj elemente u prvu listu\n");
                printf("Unesite broj :");
                scanf("%d", &broj);
                p1=dodaj(p1, broj);
                break;

            case 'b':
                printf("dodaj elemente u drugu listu\n");
                printf("Unesite broj :");
                scanf("%d", &broj);
                p2=dodaj(p2, broj);
                break;

            case 'c':
                ispis(p1);
                break;

            case 'd':
                ispis(p2);
                break;

            case 'e':
                p=presjek(p1, p2);
                break;

            case 'f':
                printf("\n");
                ispis(p);
                printf("\n");
                break;

            case 'k':
                printf("Kraj");
                break;

            default:
                printf("pogresan odabir\n");
        }
    }

    while (p1!=NULL)
    {
        temp=p1;
        p1=p1->next;
        free(temp);
    }

    while (p2!=NULL)
    {
        temp=p2;
        p2=p2->next;
        free(temp);
    }

    while (p!=NULL)
    {
        temp=p;
        p=p->next;
        free(temp);
    }

    return 0;
}

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
13 godina
neaktivan
offline
Re: Vezana lista,presjek

hvala,skuzila sam di sam pogrijesila,ispricavam se ako ste izgubili svoje vrijeme rjesavajuc moj zadatak {#}

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice