Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <malloc.h> // функции финамического распределения памяти
- #define HT_SIZE 16 //
- #define ST_SIZE 8
- #define N 5
- typedef struct node {
- struct node* next;
- int arr[ST_SIZE];
- int cnt;
- } cell;
- typedef struct {
- cell* tab[HT_SIZE];
- } htable;
- int htable_add(htable* ht, int v){
- cell* p;
- int i;
- unsigned int k = (unsigned int)v % HT_SIZE;
- for(p = ht->tab[k]; p != NULL; p = p->next){
- for(i = 0; i < p->cnt; ++i){
- if(p->arr[i] == v)
- return 0;
- }
- }
- p = ht->tab[k];
- if((p != NULL) && (p->cnt < ST_SIZE))
- p->arr[p->cnt++] = v;
- else {
- p = (cell*)malloc(sizeof(cell)); // выделить память под структуру
- if(p == NULL)
- return 0;
- p->cnt = 1;
- p->arr[0] = v;
- p->next = ht->tab[k];
- ht->tab[k] = p;
- }
- return 1;
- }
- //инициализация
- void htable_init(htable* ht){
- int i;
- for(i = 0; i < HT_SIZE; ++i)
- ht->tab[i] = NULL;
- }
- //удаление всего
- void htable_clear(htable* ht){
- int i;
- cell* p;
- for(i = 0; i < HT_SIZE; ++i){
- while(ht->tab[i] != NULL){
- p = ht->tab[i];
- ht->tab[i] = ht->tab[i]->next;
- free(p);
- }
- }
- }
- int main(){
- cell* p;
- htable ht;
- int i, j;
- // Ввод самой матрицы
- int mat[N][N] = {
- { 0, 245, 387, 444, 999 },
- { 113, 232, 888, 9, 4 },
- { 1, 5, 323, 0, 888 },
- { 669, 765, 888, 943, 444 },
- { 0, 222, 4, 523, 666 }
- };
- htable_init(&ht);
- for(i = 0; i < N; ++i){
- for(j = 0; j < N; ++j)
- htable_add(&ht, mat[i][j]);
- }
- //вывод
- printf("\nСписок всех различных элементов матрицы:\n");
- for(i = 0; i < HT_SIZE; ++i){
- for(p = ht.tab[i]; p != NULL; p = p->next){
- for(j = 0; j < p->cnt; ++j)
- printf("%d ", p->arr[j]);
- }
- }
- htable_clear(&ht);
- printf("\nНажмите Enter для завершения.");
- getchar();
- return 0;
- }
- //вставка
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement