Exemple #1
0
void MergeSort(LinkedList* list, int (*comparator)(void* left, void* right))
{
  int size = LLSize(list);
  if ( size > 1 )
  {
    int middle = size / 2;
    LinkedList* spliced = LLSplice(list, middle);
    MergeSort(list, comparator);
    MergeSort(spliced, comparator);
    Combine(list, spliced, comparator);
    LLDestroy(spliced);
  }
}
Exemple #2
0
static void Combine(LinkedList* l1, LinkedList* l2, int (*comparator)(void* left, void* right))
{
  LinkedList* ret = NULL;
  LLInit(&ret);
  Node* p1 = l1->head;
  Node* p2 = l2->head;
  while ( p1 && p2 )
  {
    int cres = (*comparator)(p1->data, p2->data);
    if ( cres < 0 )
    {
      LLInsert(ret, p1->data);
      p1 = p1->next;
    }
    else if ( !cres )
    {
      LLInsert(ret, p1->data);
      LLInsert(ret, p2->data);
      p1 = p1->next;
      p2 = p2->next;
    } 
    else
    {
      LLInsert(ret, p2->data);
      p2 = p2->next;
    }
  }
  while ( p1 )
  {
      LLInsert(ret, p1->data);
      p1 = p1->next;
  }
  while ( p2 )
  {
      LLInsert(ret, p2->data);
      p2 = p2->next;
  }
  LLCopy(l1, ret);
  LLDestroy(ret);
}
Exemple #3
0
int main(int argc, char *argv[]){
	if(argc == 1){
		printf("Please enter a index file \n");
		printf("Usage: <name of compiled program> <option> <Memory Size> <Index File> \n");
	}
	
	if(argc == 4){
		
		FILE *fp;
				
		/***** CONVERT INPUTTED STRING TO MEMORY SIZE *******/
		data *dataptr = (data *) malloc(sizeof(struct data_));

		char *rawmemory = argv[2];
		int num = 0;
		char *memory = rawmemory;
		int multiplier;

		while(isdigit(*rawmemory)){
			num++;
			rawmemory++;
		}

		if(*rawmemory == 'K'){
			multiplier = 1024;
		}

		if(*rawmemory == 'M'){
			multiplier = 1024 * 1024;
		}

		if(*rawmemory == 'G'){
			multiplier = 1024 * 1024 * 1024;
		}

		*rawmemory = '\0';
		dataptr->maxmemory = atoi(memory) * multiplier;
		dataptr->currmemory = 0;


		/**************************************************/

		char line[1000];
		TokenizerT *tokenizer;
		char *token;

		word *newword;
		int memusage = 0;

		dataptr->file = argv[3];

		fp = fopen(argv[3], "r");
		if(fp == NULL){
			fprintf(stderr, "file could not be opened \n");
		}

		while(fgets(line, 1000, fp) != NULL){
			tokenizer = TKCreate(line);
			token = TKGetNextToken(tokenizer);

			while (token != NULL){
				checktoken(token);
				

				if(start == 1){
					if (!(counter % 2)){
						/* THIS IS WHERE I GET THE FILENAME STRING OF EACH WORD*/
						LLInsert(newword->filelist, token);
						memusage = memusage + strlen(token);
								
					}

					counter++;
				}


				/*fprintf(fp2, "%s \n", token);*/
						
				token = TKGetNextToken(tokenizer);
						
				if(var == 1){
					newword = (word *)malloc(sizeof(struct words));
					newword->string = token;
					newword->filelist = LLCreate();
					memusage = memusage + strlen(token);

					var = 0;
					start = 1;
					counter++;
				}
				if(var2 == 1){
					/* AFTER I HAVE ADDED ALL THE FILENAME INDEXES TO THE WORD THEN I INSERT IT INTO listwords array and print it out onto the console */
					if(memusage + dataptr->currmemory > dataptr->maxmemory){
						free(newword);
						break;
					}
					else{
						listwords[lwsize] = newword;
						lwsize++;
						var2 = 0;
						dataptr->currmemory = dataptr->currmemory + memusage;
						newword->memory = memusage;
						memusage = 0;
					}
					
				}

			}

			if(memusage + dataptr->currmemory > dataptr->maxmemory)
				break;
		}

		var = 0;
		var2 = 0;
		start = 0;

		TKDestroy(tokenizer);
		fclose(fp);


		char str[100];
		int x;

		
		for(; ;){
			linkedListPtr searchlist = LLCreate();
			linkedListPtr foundlist = LLCreate();

			/* LOOPING USER INTERFACE */
			printf("search> ");
			fgets(str, 100, stdin);

			  

			x = strlen(str)-1;
			if(str[x] == '\n') 
			    str[x] = '\0';

			token = strtok(str, " ");
			
			LLInsert(searchlist, token);

			
			while ((token = (strtok(NULL, " "))) != NULL){
				LLInsert(searchlist, token);
				searchlist->size++;
			}
			
		
			if (strcmp(searchlist->head->filename, "q") == 0){
			  	break;
			}			

			if(strcmp(searchlist->head->filename, "so") == 0){
				searchlist->head = searchlist->head->next;
				searchor(foundlist, searchlist, dataptr);
			}
			else if(strcmp(searchlist->head->filename, "sa") == 0){
				searchlist->head = searchlist->head->next;
				searchand(foundlist, searchlist, dataptr);
			}
			LLDestroy(searchlist);
			LLDestroy(foundlist);

		}

		int i;

		for (i = 0; i < lwsize; i++){
			LLDestroy(listwords[i]->filelist);
			free(listwords[i]->string);
			free(listwords[i]);
		}


	}
	
				
}