Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #include <stddef.h>
- int const a = 1;
- int const b = 0;
- int const p = 89;
- int const m = 15;
- int max = 0;
- int min = 0;
- int max_key = 0;
- int min_key = 0;
- typedef struct node{
- int value;
- int square;
- float radical;
- struct node *next;
- struct node *early;
- }node;
- int search_number (int key){
- int i;
- for (i = 0; i < m; i++){
- if (i==(((a*key + b)% p)% m)){
- return i;
- }
- }
- return -1;
- }
- void insert_node (int *A, int key){
- int i = search_number (key);
- node *tmp = (node*) malloc(sizeof(node));
- tmp->value = key;
- tmp->square = key*key;
- tmp->radical = sqrt((float)key);
- if (A[i] == 0){
- A[i] = tmp;
- tmp->next = NULL;
- tmp->early = NULL;
- }
- else{
- node *tmp2;
- tmp2 = A[i];
- A[i] = tmp;
- tmp->next = tmp2;
- tmp2->early = tmp;
- }
- }
- void output_list (int *A, int key){
- int j;
- j = search_number (key);
- if (!A[j]){
- printf ("no elements");
- }
- else{
- node *iter = A[j];
- while (iter != NULL){
- printf ("Value: %d\n", iter->value);
- printf ("The square root of value: %f\n", iter->radical );
- printf ("The square of value: %d\n", iter->square );
- iter = iter->next;
- printf ("\n");
- }
- }
- }
- int search_key (int *A, int key){
- int i, find = -1;
- i = search_number (key);
- node *iter;
- iter = A[i];
- while (iter){
- if (iter->value == key) find = 1;
- iter = iter->next;
- }
- return find;
- }
- int delete_node (int *A, int key){
- int i, done = -1;
- max = 0;
- max_key = 0;
- i = search_number (key);
- node *iter;
- iter = A[i];
- iter->early = NULL;
- while (1){
- if (iter->value == key){
- done = 1;
- break;
- }
- iter = iter->next;
- }
- node *temporary;
- temporary = iter;
- if ((iter->early == NULL)&&(iter->next == NULL)){ //first element and last
- A[i] = NULL;
- free (temporary);
- return done;
- }
- if ((iter->early != NULL)&&(iter->next != NULL)){ //in the middle
- node *tmp;
- tmp = iter->next;
- iter->next->early = iter->early;
- iter->early->next = tmp;
- free (temporary);
- return done;
- }
- if ((iter->early == NULL)&&(iter->next != NULL)){
- A[i] = iter->next;
- iter->next = NULL;
- free (temporary);
- return done;
- }
- if ((iter->early != NULL)&&(iter->next == NULL)){
- iter->early->next = NULL;
- free (temporary);
- return done;
- }
- }
- void max_list (int *A){
- node *iter;
- int i, count;
- for (i = 0; i < m; i++){
- iter = A[i];
- count = 0;
- if (iter != NULL){
- while (1){
- count ++;
- if (iter->next == NULL)
- break;
- iter = iter->next;
- }
- if (max < count){
- max = count;
- max_key = iter->value;
- }
- }
- }
- }
- void min_list (int *A){
- node *iter;
- min = max;
- min_key = max_key;
- int i, count;
- for (i = 0; i < m; i++){
- iter = A[i];
- count = 0;
- if (iter != NULL){
- while (1){
- count ++;
- if (iter->next == NULL)
- break;
- iter = iter->next;
- }
- if (min > count){
- min = count;
- min_key = iter->value;
- }
- }
- else{
- min = 0;
- min_key = -1;
- printf ("u have empty line i = %d\n", i);
- i = m;
- }
- }
- }
- int main (void){
- int count = 30;
- int number, key, key2, i;
- int *A[m];
- for (i = 0; i < m; i++){
- A[i] = NULL;
- }
- FILE *mf;
- printf ("opening file :");
- mf = fopen ("C:\\Users\\Anna\\Documents\\ci\\hash.dat","r+");
- if (mf == NULL)
- printf ("error\n");
- else printf ("done\n");
- for (i = 0; i < count; i++){
- fscanf(mf, "%d %d", &number, &key);
- printf ("%d\n", key);
- // printf ("%d\n", j);
- insert_node (A, key);
- }
- printf ("\n");
- int variety, search;
- int behavior = 1;
- while (behavior){
- printf ("Choose what u want:\n1-Add data\n2-Search key \n3-Delete key\n4-Watch on minimal, maximal, average of list\n0-If you want stop this\n");
- printf ("Your choice: ");
- scanf ("%d", &variety);
- switch (variety){
- case 1:
- count++;
- printf ("Input key, what we want insert: ");
- scanf ("%d", &key);
- insert_node (A, key);
- printf ("let's see what lye in A if key = %d\n", key);
- output_list (A, key);
- break;
- case 2:
- printf ("Input key, which we search: ");
- scanf ("%d", &key);
- search = search_key (A, key);
- if (search == -1){
- printf ("no this key in hash-table\n");
- }
- else {
- printf ("U have this key in hash-table\n");
- output_list (A, key);
- }
- break;
- case 3:
- printf ("Input key, which delete: ");
- scanf ("%d", &key2);
- search = search_key(A, key2);
- if (search == -1){
- printf ("no this key in hash-table\n");
- }
- else {
- int del;
- del = delete_node (A, key2);
- if (del == -1){
- printf ("Error. This element wasn't deleted\n");
- }
- else {
- count--;
- printf ("Good job. Element was deleted\n");
- }
- }
- break;
- case 4:
- max_list (A);
- min_list (A);
- printf ("Max lengh of list %d, this is for this key %d\n", max, max_key);
- printf ("Min lengh of list %d, this is for this key %d\n", min, min_key);
- float average;
- average = (float)count/(float)m;
- printf ("Average lengh of list %f\n", average);
- break;
- case 0:
- behavior = 0;
- break;
- default:
- printf("Wrong input\n" );
- break;
- }
- }
- fclose (mf);
- printf ("file closed\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement