Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

nešto sasvim jednostavno i kratko, liste

[es] :: C programiranje :: C za početnike :: nešto sasvim jednostavno i kratko, liste

[ Pregleda: 252 | Odgovora: 1 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon nešto sasvim jednostavno i kratko, liste28.11.2007. u 11:33

Evo celog programa da ga možete pokrenit ali samo pogledajte funkciju void Delete ( struct list ** head ), označena je komentarima koda i piše šta nedostaje
Code:
#include <stdio.h>
#include <stdlib.h>

void InsertOnBegean( struct list ** );
void PrintLIst ( struct list * );
void InsertOnEnd ( struct list ** );
void Delete ( struct list **  );

struct list
{
    int value;
    struct list * next;
};
void PrintList(struct list * head)
{
    if ( head ) 
    {
        while ( head != NULL ) 
        {
            printf ( "%d", head->value ); 
            head = head->next; 
        }
    }
    else
    {
        printf ("Lista je prazna");
    }
    printf("\n");
}    
void InsertOnBegean( struct list ** head )
{
    
    struct list * list_ptr;
    list_ptr = (struct list * ) malloc ( sizeof( struct list ) ); 
    printf("Ucitaj element liste koji se ubacuje na pocetak:");
    scanf( "%d", &list_ptr->value );
    if (  *head == NULL )
    {
        *head = list_ptr;
        (*head)->next = NULL;
    }
    else
    {
        list_ptr->next = *head;
        *head = list_ptr;
    }
}
void InsertOnEnd ( struct list ** head )
{
    struct list * list_ptr, *act;
    list_ptr = (struct list * ) malloc ( sizeof( struct list ) ); 
    printf("Ucitaj element liste koji se ubacuje na kraj:");
    scanf( "%d", &list_ptr->value );
    if ( *head == NULL )
    {
        (*head) = list_ptr;
        (*head)->next = NULL;
    }
    else
    {
        act  = *head;
        while ( act->next != NULL )
            act = act->next;
        act->next = list_ptr;
        list_ptr->next = NULL;
    }

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Delete ( struct list ** head )//funkcija Delete prihvaća adresu pointera head koji je početak liste//////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    int data;/////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct list * act, * ptr;/////////////////////////////////////////////////////////////////////////////////////////////
    act = *head;//act je head, glava liste////////////////////////////////////////////////////////////////////////////////
    printf ( "Unesite trazeni element\n" );/////////////////////////////////////////////////////////////////////////////// 
    scanf ( "%d", &data );//unosimo traženi element///////////////////////////////////////////////////////////////////////
    if ( act )//ako act = *head nije NULL dakle lista ima elemenata///////////////////////////////////////////////////////
    {/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if ( act->value == data )//ako je act->value jednak data ( traženom elementu ) element se nalazi na prvom mestu///
        {    
            //kako da izbrišen prvi element?
        }
        else//Nije prvi? Idemo u while petlju/////////////////////////////////////////////////////////////////////////////
        {/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            while ( act->value != data )// dok se ne dođe do trženog elementa/////////////////////////////////////////////
            {/////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ptr = act;//ovo će biti prethodni jer act sigurno nije traženi, nebismo ušli u petlju/////////////////////
                act = act->next;//act postaje sledeći element/////////////////////////////////////////////////////////////
                if ( act == NULL )//ako je act jednak NULL došli sno do kraja liste i nismo ništa našli///////////////////
                {/////////////////////////////////////////////////////////////////////////////////////////////////////////
                    printf ( "element nije pronadjen\n" );////////////////////////////////////////////////////////////////
                    break;////////////////////////////////////////////////////////////////////////////////////////////////
                }/////////////////////////////////////////////////////////////////////////////////////////////////////////
            }/////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if ( act != NULL )//izašli smo iz petlje i nismo došli do kraja dakle našli smo ga////////////////////////////
            {/////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ptr->next = act->next;//povezujem prethodni sa sledećim act ispada////////////////////////////////////////
                printf ( "element %d, nadjen i izbrisan\n", act->value );/////////////////////////////////////////////////
                free ( act );//oslobađamo memoriju////////////////////////////////////////////////////////////////////////
            }/////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    else//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        printf ( "LISTA je prazna\n" );// act = *head je NULL lista je prazna/////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
    struct list * head = NULL;
    int ch = 1;
    while ( ch != 0 )
    {
        printf ( "1 - insert on begean\n2 - insert on end\n3 -delete\n4 - list\n0 - end\n" );
        scanf( "%d", &ch );
        switch ( ch )
        {
        case 1:
            InsertOnBegean ( &head );
            break;
        case 2:
            InsertOnEnd ( &head );
            break;
        case 3:
            Delete ( &head );
            break;
        case 4:
            PrintList ( head );
            break;
        default :
            break;
        }
    }
}
28.11.2007. u 11:33 

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon Re: nešto sasvim jednostavno i kratko, liste28.11.2007. u 12:50
rešio sam
Code:
void Delete ( struct list ** head )//funkcija Delete prihvaća adresu pointera head koji je početak liste//////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    int data;/////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct list * act, * ptr;/////////////////////////////////////////////////////////////////////////////////////////////
    act = *head;//act je head, glava liste////////////////////////////////////////////////////////////////////////////////
    printf ( "Unesite trazeni element\n" );/////////////////////////////////////////////////////////////////////////////// 
    scanf ( "%d", &data );//unosimo traženi element///////////////////////////////////////////////////////////////////////
    if ( act )//ako act = *head nije NULL dakle lista ima elemenata///////////////////////////////////////////////////////
    {/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if ( act->value == data )//ako je act->value jednak data ( traženom elementu ) element se nalazi na prvom mestu///
        {    
            *head = act->next;
            free ( act );
        }
        else//Nije prvi? Idemo u while petlju/////////////////////////////////////////////////////////////////////////////
        {/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            while ( act->value != data )// dok se ne dođe do trženog elementa/////////////////////////////////////////////
            {/////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ptr = act;//ovo će biti prethodni jer act sigurno nije traženi, nebismo ušli u petlju/////////////////////
                act = act->next;//act postaje sledeći element/////////////////////////////////////////////////////////////
                if ( act == NULL )//ako je act jednak NULL došli sno do kraja liste i nismo ništa našli///////////////////
                {/////////////////////////////////////////////////////////////////////////////////////////////////////////
                    printf ( "element nije pronadjen\n" );////////////////////////////////////////////////////////////////
                    break;////////////////////////////////////////////////////////////////////////////////////////////////
                }/////////////////////////////////////////////////////////////////////////////////////////////////////////
            }/////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if ( act != NULL )//izašli smo iz petlje i nismo došli do kraja dakle našli smo ga////////////////////////////
            {/////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ptr->next = act->next;//povezujem prethodni sa sledećim act ispada////////////////////////////////////////
                printf ( "element %d, nadjen i izbrisan\n", act->value );/////////////////////////////////////////////////
                free ( act );//oslobađamo memoriju////////////////////////////////////////////////////////////////////////
            }/////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    else//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        printf ( "LISTA je prazna\n" );// act = *head je NULL lista je prazna/////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
28.11.2007. u 12:50 

[es] :: C programiranje :: C za početnike :: nešto sasvim jednostavno i kratko, liste

[ Pregleda: 252 | Odgovora: 1 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.