Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h> // функции финамического распределения памяти
  3. #define HT_SIZE  16 //
  4. #define ST_SIZE  8
  5. #define N        5
  6.  
  7. typedef struct node {
  8.     struct node* next;
  9.     int arr[ST_SIZE];
  10.     int cnt;
  11. } cell;
  12.  
  13. typedef struct {
  14.     cell* tab[HT_SIZE];
  15. } htable;
  16.  
  17. int htable_add(htable* ht, int v){
  18.     cell* p;
  19.     int   i;
  20.     unsigned int k = (unsigned int)v % HT_SIZE;
  21.  
  22.     for(p = ht->tab[k]; p != NULL; p = p->next){
  23.         for(i = 0; i < p->cnt; ++i){
  24.             if(p->arr[i] == v)
  25.                 return 0;
  26.         }
  27.     }
  28.  
  29.     p = ht->tab[k];
  30.     if((p != NULL) && (p->cnt < ST_SIZE))
  31.         p->arr[p->cnt++] = v;
  32.     else {
  33.         p = (cell*)malloc(sizeof(cell)); // выделить память под структуру
  34.         if(p == NULL)
  35.             return 0;
  36.  
  37.         p->cnt     = 1;
  38.         p->arr[0]  = v;
  39.         p->next    = ht->tab[k];
  40.         ht->tab[k] = p;
  41.     }
  42.     return 1;
  43. }
  44.  
  45. //инициализация
  46. void htable_init(htable* ht){
  47.     int i;
  48.     for(i = 0; i < HT_SIZE; ++i)
  49.         ht->tab[i] = NULL;
  50. }
  51.  
  52. //удаление всего
  53. void htable_clear(htable* ht){
  54.     int   i;
  55.     cell* p;
  56.     for(i = 0; i < HT_SIZE; ++i){
  57.         while(ht->tab[i] != NULL){
  58.             p = ht->tab[i];
  59.             ht->tab[i] = ht->tab[i]->next;
  60.             free(p);
  61.         }
  62.     }
  63. }
  64.  
  65. int main(){
  66.     cell*  p;
  67.     htable ht;
  68.     int    i, j;
  69.    
  70.     // Ввод самой матрицы
  71.     int mat[N][N] = {
  72.         { 0, 245, 387, 444, 999 },
  73.         { 113, 232, 888, 9, 4 },
  74.         { 1, 5, 323, 0, 888 },
  75.         { 669, 765, 888, 943, 444 },
  76.         { 0, 222, 4, 523, 666 }
  77.     };
  78.  
  79.     htable_init(&ht);
  80.     for(i = 0; i < N; ++i){
  81.         for(j = 0; j < N; ++j)
  82.             htable_add(&ht, mat[i][j]);
  83.     }
  84.  
  85.     //вывод
  86.     printf("\nСписок всех различных элементов матрицы:\n");
  87.     for(i = 0; i < HT_SIZE; ++i){
  88.         for(p = ht.tab[i]; p != NULL; p = p->next){
  89.             for(j = 0; j < p->cnt; ++j)
  90.                 printf("%d ", p->arr[j]);
  91.         }
  92.     }
  93.    
  94.     htable_clear(&ht);
  95.     printf("\nНажмите Enter для завершения.");
  96.     getchar();
  97.     return 0;
  98. }
  99.  
  100. //вставка
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement