Advertisement
Guest User

Untitled

a guest
Nov 1st, 2014
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.84 KB | None | 0 0
  1. //
  2. //  main.c
  3. //  Uloha_6.2
  4. //
  5. //  Created by Marcel Choma on 28.10.2014.
  6. //  Copyright (c) 2014 Marcel Choma. All rights reserved.
  7. //
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11.  
  12. typedef struct hash_table{
  13.     char *kod_preukazu;
  14.     struct hash_table *next;
  15. }HASH_TABLE;
  16.  
  17. int opakovania = 0;
  18. int hash(char *retazec, int pocet)
  19. {
  20.     int i = 0;
  21.     int hash = 0;
  22.     for (i=0; retazec[i]!='\0'; i++)
  23.     hash = ((i * hash) + (retazec[i]))/2;
  24.     return (hash % pocet);
  25. }
  26.  
  27. void pridaj(char *retazec, int pocet, HASH_TABLE *pole[])
  28. {
  29.     int index = hash(retazec, pocet);
  30.     HASH_TABLE *aktualny, *predosly = NULL;
  31.     aktualny = pole[index];
  32.     if (pole[index] == NULL){
  33.         pole[index] = (HASH_TABLE*) malloc(sizeof(HASH_TABLE));
  34.         pole[index]->kod_preukazu = retazec;
  35.         return;
  36.     }
  37.     while (aktualny != NULL){
  38.         if((strcmp(aktualny->kod_preukazu, retazec) == 0)){
  39.             opakovania++;
  40.             return;
  41.         }
  42.         predosly = aktualny;
  43.         aktualny = aktualny->next;
  44.     }
  45.     predosly->next = (HASH_TABLE*) malloc(sizeof(HASH_TABLE));
  46.     predosly->next->kod_preukazu = retazec;
  47.     predosly->next->next = NULL;
  48.    
  49. }
  50. // spracuje cisla OP: vrati pocet najdenych duplikatov.
  51. int vyhadzovac(char *a[], int n)
  52. {
  53.     int i,j;
  54.    
  55.     HASH_TABLE *pole[n];
  56.     for (i = 0; i < n; i++)
  57.     pole[i] = 0;
  58.     for (j = 0; j < n; j++)
  59.     pridaj(a[j], n, pole);
  60.     return opakovania;
  61.    
  62. }
  63.  
  64. // ukazkovy test
  65. int main(void)
  66. {
  67.     //    , "BA987689","AA123456","AA123456","BA987689", "AA123123", "BA987689", "AA312312", "BA987689","AA123123", "AA123123", "BA987689", "AA312312", "BA987689","AA123123"
  68.     char *a[] = {"abc", "acb", "cba", "cab", "cab", "bca", "bac", "bca", "bac"};
  69.     printf("Pocet duplikatov: %d\n", vyhadzovac(a, 9));
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement