List.c: Diferență între versiuni

De la WikiLabs
Jump to navigationJump to search
(Pagină nouă: <syntaxhighlight lang="c"> →‎* * This is the header file for a list implementation: #ifndef __LIST_H__ #define __LIST_H__ #define UNLIMITED_SIZE -1 struct simply_linked_node...)
 
Fără descriere a modificării
 
Linia 1: Linia 1:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
#include "list.h"
#include <stdlib.h>


/**
* This is the header file for a list implementation
*/


#ifndef __LIST_H__
struct simply_linked_node * create_simply_linked_node(int data){
#define __LIST_H__
    struct simply_linked_node * new_node =
        (struct simply_linked_node*)malloc(sizeof(struct simply_linked_list));
       
    new_node->data = data;
    new_node->next = NULL;
   
    return new_node;
}
   
   
#define UNLIMITED_SIZE -1
struct simply_linked_list * create_simply_linked_list(int max_size){
    struct simply_linked_list * new_list =
        (struct simply_linked_list*)malloc(sizeof(struct simply_linked_list));
 
    new_list->first = NULL;
    new_list->last = NULL;
    new_list->size = 0;
    new_list->max_size = max_size;
 
    return new_list;
}
 
int is_full(struct simply_linked_list * list){
    return list->max_size != UNLIMITED_SIZE && list->size == list->max_size;
}
   
   
struct simply_linked_node{
void add_node_to_end_of_list(struct simply_linked_node * node, struct simply_linked_list * list){
  int data;
    if(is_full(list)){
  struct simply_linked_node * next;
        return;
};
    }
   
struct simply_linked_node * create_simply_linked_node(int data);
    node->next = NULL;
    if(!list->size){
struct simply_linked_list{
        list->first = node;
  struct simply_linked_node * first;
        list->last = node;
  struct simply_linked_node * last;
    }else{
  unsigned size;
        list->last->next = node;
  int max_size;
        list->last = node;
};
    }
   
struct simply_linked_list * create_simply_linked_list(int max_size);
    list->size++;
}
int is_full(struct simply_linked_list * list);
 
struct simply_linked_node * get_node(struct simply_linked_list * list, unsigned position){
void add_node_to_end_of_list(struct simply_linked_node * node, struct simply_linked_list * list);
    struct simply_linked_node * node = list->first;
    while(node != NULL && position){
void add_node_to_list(struct simply_linked_node * node, struct simply_linked_list * list, unsigned position);
        node = node->next;
        position--;
    }
    return node;
}
 
void add_node_to_list(struct simply_linked_node * new_node, struct simply_linked_list * list, unsigned position){
    if(is_full(list)){
        return;
    }
   
    if(!position){
        new_node->next = list->first;
        list->first = new_node;
        if(!list->size){
            list->last = list->first;  
        }
    }else{
        struct simply_linked_node * node = get_node(list, position - 1);
        new_node->next = node->next;
        node->next = new_node;
    }
   
    list->size++;
}


struct simply_linked_node * get_node(struct simply_linked_list * list, unsigned position);
void delete_node(struct simply_linked_list * list, unsigned position){
    struct simply_linked_node * old_node;


void delete_node(struct simply_linked_list * list, unsigned position);
    if(!list->size){
        return;
#endif
    }
   
   
    if(position == 0){
        if(list->size == 1){
            free(list->first);
            list->first = NULL;
            list->last = NULL;
            list->size = 0;
        }else{
            old_node = list->first;
            list->first = old_node->next;
            free(old_node);
            list->size--;
        }
        return;
    }
   
   
    struct simply_linked_node * node = get_node(list, position - 1);
   
    if(node == NULL){
        return;
    }
   
    old_node = node->next;
    node->next = old_node->next;
   
    if(old_node == list->last){
        list->last = node;
    }
    list->size--;
   
    free(old_node);
}
</syntaxhighlight>
</syntaxhighlight>

Versiunea curentă din 3 aprilie 2014 09:02

#include "list.h"
#include <stdlib.h>


struct simply_linked_node * create_simply_linked_node(int data){
    struct simply_linked_node * new_node = 
        (struct simply_linked_node*)malloc(sizeof(struct simply_linked_list));
        
    new_node->data = data;
    new_node->next = NULL;
    
    return new_node;
}
 
struct simply_linked_list * create_simply_linked_list(int max_size){
    struct simply_linked_list * new_list = 
        (struct simply_linked_list*)malloc(sizeof(struct simply_linked_list));

    new_list->first = NULL;
    new_list->last = NULL;
    new_list->size = 0;
    new_list->max_size = max_size;

    return new_list;
}

int is_full(struct simply_linked_list * list){
    return list->max_size != UNLIMITED_SIZE && list->size == list->max_size;
}
 
void add_node_to_end_of_list(struct simply_linked_node * node, struct simply_linked_list * list){
    if(is_full(list)){
        return;
    }
    
    node->next = NULL;
    if(!list->size){
        list->first = node;
        list->last = node;
    }else{
        list->last->next = node;
        list->last = node;
    }
    
    list->size++;
}

struct simply_linked_node * get_node(struct simply_linked_list * list, unsigned position){
    struct simply_linked_node * node = list->first;
    while(node != NULL && position){
        node = node->next;
        position--;
    }
    return node;
}

void add_node_to_list(struct simply_linked_node * new_node, struct simply_linked_list * list, unsigned position){
    if(is_full(list)){
        return;
    }
    
    if(!position){
        new_node->next = list->first;
        list->first = new_node;
        if(!list->size){
            list->last = list->first; 
        }
    }else{
        struct simply_linked_node * node = get_node(list, position - 1);
        new_node->next = node->next;
        node->next = new_node;
    }
    
    list->size++;
}

void delete_node(struct simply_linked_list * list, unsigned position){
    struct simply_linked_node * old_node;

    if(!list->size){
        return;
    }
    
    
    if(position == 0){
        if(list->size == 1){
            free(list->first);
            list->first = NULL;
            list->last = NULL;
            list->size = 0;
        }else{
            old_node = list->first;
            list->first = old_node->next;
            free(old_node);
            list->size--;
        }
        return;
    }
    
    
    struct simply_linked_node * node = get_node(list, position - 1);
    
    if(node == NULL){
        return;
    }
    
    old_node = node->next;
    node->next = old_node->next;
    
    if(old_node == list->last){
        list->last = node;
    }
    list->size--;
    
    free(old_node);
}