Guest User

Untitled

a guest
Nov 30th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.02 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#include <time.h>
  4. #define DIM 100
  5. #include "list.h"
  6.  
  7.  
  8. /*Rappresentazione di liste con array */
  9. typedef struct{
  10.   int key[DIM];
  11.   int next[DIM];
  12.   int prev[DIM];
  13. } Spazio;
  14.  
  15. /* Variabili globali*/
  16. List freeList;  /*Testa della free List che e' una lista DOPPIAMENTE concatenata*/
  17. Spazio space; /*Spazio utilizzato per memorizzare le liste*/
  18.  
  19.  
  20. /*Post: inizializza space in modo che tutti gli elementi siano nella lista libera. La testa della lista libera sara' 0 */
  21. void initFreelist(){
  22.     int i;
  23.     for(i=0;i<DIM;i++)space.prev[i]=(i-1);
  24.     for(i=0;i<DIM;i++)space.next[i]=(i+1);
  25.     space.next[DIM-1]=-1; //indico ultimo elem.
  26.     freeList=0;
  27. }
  28.  
  29. /*Post: restituisce un oggetto libero. Se lo spazio e' esaurito stampa un messaggio di errore  */
  30. List allocateObject(){
  31.     if(freeList<0){printf("Errore: spazio esaurito!"); return -2;}
  32.     else return freeList;
  33. }
  34.  
  35. /* Post: restituisce il numero di elementi contenuti nella lista */
  36. int lunghezza(List l){
  37.     int counter=0;
  38.     if(l<0)return 0;
  39.     if(space.next[l]<0)return 1;
  40.     else return 1+lunghezza(space.next[l]);
  41. }
  42.  
  43.  
  44. /*Post: stampa il contenuto della lista. Deve essere una funzione RICORSIVA */
  45. void stampa(List l){
  46.     if(l<0){printf("LISTA VUOTA."); return;}
  47.     printf("%d ",space.key[l]);
  48.     if(space.next[l]<0)printf(".");
  49.     else stampa(space.next[l]);
  50. }
  51.  
  52.  
  53.  
  54. /*Post: legge una sequenza di interi inseriti dall'utente e restituisce una lista contenente tale sequenza*/
  55. List caricamento(){
  56.  
  57.     int i,n,temp;
  58.     List l,pointer;
  59.     l=allocateObject();
  60.     pointer=l;
  61.     printf("Lunghezza Lista: ");
  62.     scanf("%d",&i);
  63.    
  64.     if(i>=lunghezza(l)){printf("Non c'e' spazio a sufficienza! ERRORE!\n"); return -2;}
  65.     if(i==0)return -1; //lista vuota
  66.     if(i<0){printf("Valore ERRATO!\n"); return -2;}
  67.    
  68.     space.prev[l]=-1;
  69.    
  70.     //inserimento valori
  71.     for (n=0;n<i;n++)
  72.   {
  73.     printf ("Inserisci il valore #%d: ",n+1);
  74.     scanf ("%d",&(space.key[l]));
  75.     temp=l;
  76.     l=space.next[l];//l++
  77.   }
  78.   space.next[temp]=-1;
  79.  
  80.   space.prev[l]=-1;
  81.   freeList=l;
  82.  
  83. return pointer;
  84. }
  85.  
  86. /* Stampa la situazione globale */
  87. void debug(){
  88.     int i,j;
  89.     int charperrow=8;
  90.     printf("freeList: %d\n",freeList);
  91.     for(i=0;i<DIM/charperrow;i++){
  92.         printf("N:\t");
  93.         for(j=0;j<charperrow;j++)printf("%d\t",space.next[i*charperrow+j]);
  94.         printf("\nK:\t");
  95.         for(j=0;j<charperrow;j++)printf("%d\t",space.key[i*charperrow+j]);
  96.         printf("\nP:\t");
  97.         for(j=0;j<charperrow;j++)printf("%d\t",space.prev[i*charperrow+j]);
  98.         printf("\n\n");
  99.     }
  100.    
  101. }
  102.  
  103.  
  104. /*Post: rende libero l'oggetto x  */
  105. void freeObject(List x){
  106.     int temp=x;
  107.     space.prev[x]=-1;
  108.     while(space.next[x]>0)x=space.next[x];//scorro a fine lista x per attaccarci la freeList
  109.     space.next[x]=freeList;
  110.     space.prev[freeList]=x;
  111.     freeList=temp;
  112. }
  113.  
  114.  
  115. /*Post: dealloca gli elementi contenuti nella lista */
  116. void rimuovi(List l){
  117. return;
  118. }
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125. /*Pre: Si assuma che space abbia m elementi, l sia una lista di n elementi e i rimanenti elementi di space (m -n) siano nella lista libera.
  126.   Post: sposta gli elementi in l in modo che occupino le posizioni 0, 1, ..., n-1 di space e aggiusta la lista libera in modo che essa resti corretta, occupando le posizioni di space n, n+1, ...., m - 1. La funzione restituisce la lista l con gli elementi nelle posizioni specificate.
  127.   Il tempo di esecuzione della funzione e' theta(n) e deve utilizzare SOLO una quantita' costante di spazio extra. */
  128. List compatifyList(List l){
  129.     //BOOOOOOH
  130.     return -7;
  131. }
  132.  
  133.  
  134.  
  135.  
  136. List caricaListaStronza(){
  137.  
  138.     space.next[8]=17;
  139.     space.key[8]=1;
  140.     space.prev[8]=-1;
  141.    
  142.     space.next[17]=1;
  143.     space.key[17]=2;
  144.     space.prev[17]=8;
  145.  
  146.     space.next[1]=73;
  147.     space.key[1]=3;
  148.     space.prev[1]=17;
  149.  
  150.     space.next[73]=51;
  151.     space.key[73]=4;
  152.     space.prev[73]=1;
  153.  
  154.     space.next[51]=50;
  155.     space.key[51]=5;
  156.     space.prev[51]=73;
  157.  
  158.     space.next[50]=63;
  159.     space.key[50]=6;
  160.     space.prev[50]=51;
  161.  
  162.     space.next[63]=7;
  163.     space.key[63]=7;
  164.     space.prev[63]=50;
  165.  
  166.     space.next[7]=-1;
  167.     space.key[7]=8;
  168.     space.prev[7]=63;
  169.  
  170. space.next[0]=2;
  171. space.prev[2]=0;
  172.  
  173. space.next[6]=9;
  174. space.prev[9]=6;
  175.  
  176. space.next[16]=18;
  177. space.prev[18]=16;
  178.  
  179. space.next[49]=52;
  180. space.prev[52]=49;
  181.  
  182. space.next[62]=64;
  183. space.prev[64]=62;
  184.  
  185. space.next[72]=74;
  186. space.prev[74]=72;
  187.  
  188. return 8;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment