freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

απλά συνδεδεμένη λίστα


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [1 Μήνυμα]       Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
airmang


Μέλος από: 26 Νοε 2008
Μηνύματα: 4

View users profile
ΜήνυμαΣτις: 26 Νοε 2008 17:24    Θέμα: απλά συνδεδεμένη λίστα
Περιγραφή θέματος: απλά συνδεδεμένη λίστα
Απάντηση με παράθεση  Mark this post and the followings unread

Καλησπέρα σε όλους και καλώς σας βρήκα!

Αυτή την εποχή μελετώ τις λίστες στη C.
Διάβασα ένα προηγούμενο μήνυμα για ουρές και στοίβες κι έκανα τα εξής:

Αλλάζουμε τις δομές και κάνουμε τις παρακάτω δηλώσεις

κώδικας:
typedef struct dnode {
    char *Name; /* CAR ID */
    struct dnode *Next; // δείκτης στον κόμβο της απλά συνδεδεμένης λίστας
} DNODE;

/* Stack */
typedef struct Stack {
    int Capacity; //  max στοιχεία της στοίβας
    int NumElements; // τρέχων αριθμός στοιχείων στη στοίβα
    DNODE *Top; // δείκτης στην αρχή της στοίβας
} STACK;

/* Queue  */
typedef struct Queue {
    int Capacity;   //  max στοιχεία της ουράς
    int NumElements; // αριθμός στοιχείων ουράς
    DNODE *First;  //αρχή - δείκτης
    DNODE *Last; //τέλος δείκτης
} QUEUE;

ας πούμε ότι αυτά έχουμε
και τώρα θέλω να φτιάξω τις λειτουργίες της λίστας μέσω στοίβας και ουράς
Να τι έγραψα. Θα ήθελα τη γνώμη σας. Είναι σωστά;;;;

ΣΤΟΙΒΑ
κώδικας:

STACK* stack_init(int size)    // αρχικοποίηση
{
   STACK *stack;
   stack=(STACK *)malloc(sizeof(STACK));

   if(stack==NULL)
      {
      printf("stack_init: Out of memory!\n");
      return (STACK *)NULL;
      }

   stack->Top = NULL;
   stack->Capacity = size;
   stack->NumElements=0;
   return stack;
}

int push(STACK *stack, char *carnum)  //εισαγωγή στοιχείων
{
    DNODE *p;

    p = (DNODE *)malloc(sizeof(DNODE)*(strlen(carnum)+1));
    if(p==NULL)
      {
       printf("Out of memory!\n");
       return 0;
       }

    p->Name=carnum;
    p->Next=stack->Top;
    stack->Top=p;
    (stack->NumElements)++;

     if (stack->Top == stack->Capacity)
        return 0;
     else
        return 1;
}

int is_Sempty(STACK *stack) // άδεια στοίβα-λίστα
{
   if(stack->Top == NULL)
      return 1;
   else
      return 0;
}

char *pop(STACK *stack)   // εξαγωγή στοιχείων
{
   char *car;
   DNODE *p;

   if(is_Sempty(stack))
      return (char *)NULL;
   else
   {
      car = (stack->Top)->Name;
      p=stack->Top++;
      stack->Top=p->Next;
      (stack->NumElements)--;
      free(p);
      return car;
      }
}

void clear_stack(STACK *stack)
{
   free(stack);
   stack->Top = NULL;
}


ΟΥΡΑ
κώδικας:

QUEUE* queue_init(int size)
{
   QUEUE *queue;

   queue=(QUEUE *)malloc(sizeof(QUEUE));
     if(queue==NULL)
     {
       printf("queue_init: Out of memory!\n");
       return (QUEUE *)NULL;
     }

     queue->Capacity=size;
     queue->NumElements=0;
     queue->First=NULL;
     queue->Last=NULL;

     return queue;
} // end init

int EnQueue(QUEUE *queue, char *carnum)
{
   DNODE *p;

   p = (DNODE *)malloc(sizeof(DNODE)*(strlen(carnum)+1));
   if(p==NULL)
      {
         printf("Out of memory!\n");
         return 0;
         }

   p->Next=NULL;
   p->Name=carnum;

   if (queue->First==NULL && queue->Last==NULL)
   {
      p->Next=queue->First;
      queue->First=p;
   }
   else
   {
      p->Next=queue->Last;
      queue->Last=p;
   }

  if (queue->Last >= queue->NumElements)
     return 0;
  else
     return 1;

  free(p);

}// end enqueue

int is_empty(QUEUE *queue)
{
  if(queue->NumElements==0)
     return 1;
  else
     return 0;
}  //end is_empty

char *DeQueue(QUEUE *queue)
{
   DNODE *p;

   if(is_empty(queue))
      return (char *)NULL;
   else
   {
      (queue->NumElements)--;
      
      queue->First=p->Next;
   }
} // end dequeue



Στην ουσία, βασίστηκα στο προηγούμενο παράδειγμα του φίλου koszeb (που δυστυχώς δεν μπορώ να βοηθήσω στο πρόβλημά του )
για να φτιάξω τις δικές μου λειτουργίες σαν λίστα.

Λοιπόν, κάθε βοήθεια δεκτή!!!
Ευχαριστώ ιδιαιτέρως....
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [1 Μήνυμα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 09 Δεκ 2016 17:23 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos