5 changed files with 202 additions and 0 deletions
Binary file not shown.
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
4210 |
||||
7312 |
||||
1521 |
||||
9408 |
||||
8802 |
||||
9120 |
||||
5168 |
||||
4052 |
||||
4566 |
||||
5403 |
||||
1947 |
||||
5957 |
||||
4065 |
||||
5797 |
||||
4375 |
||||
4383 |
||||
8041 |
||||
4917 |
||||
7333 |
||||
9366 |
||||
3264 |
||||
7218 |
||||
5941 |
||||
3904 |
||||
9682 |
||||
665 |
||||
1988 |
||||
8985 |
||||
6362 |
||||
7882 |
||||
190 |
||||
9006 |
||||
4114 |
||||
7514 |
||||
8534 |
||||
7871 |
||||
2459 |
||||
3072 |
||||
4906 |
||||
7396 |
||||
8413 |
||||
8633 |
||||
6473 |
||||
2651 |
||||
8647 |
||||
3076 |
||||
6677 |
||||
2202 |
||||
5810 |
||||
4527 |
||||
104 |
||||
2947 |
||||
845 |
||||
7550 |
||||
4131 |
||||
9450 |
||||
5674 |
||||
9308 |
||||
9364 |
||||
5539 |
||||
9010 |
||||
4128 |
||||
99 |
||||
1362 |
||||
1298 |
||||
2097 |
||||
664 |
||||
7459 |
||||
5262 |
||||
5894 |
||||
7623 |
||||
4973 |
||||
190 |
||||
9960 |
||||
3107 |
||||
9149 |
||||
5491 |
||||
4697 |
||||
2687 |
||||
1833 |
||||
9247 |
||||
4639 |
||||
8026 |
||||
4674 |
||||
2672 |
||||
8531 |
||||
4136 |
||||
6747 |
||||
4846 |
||||
8047 |
||||
835 |
||||
7590 |
||||
1060 |
||||
4034 |
||||
6465 |
||||
9802 |
||||
9633 |
||||
2494 |
||||
8569 |
||||
4545 |
Binary file not shown.
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
/* License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html
|
||||
*
|
||||
* Exercise 5 - Hash Map (Week 6) |
||||
* Name: Manish |
||||
* Student Login: ***** |
||||
*
|
||||
* Compile as: |
||||
* $ gcc -std=c11 -Wall -o ex5 ex5.c |
||||
*/
|
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
|
||||
typedef struct entry |
||||
{ |
||||
int data; |
||||
struct entry * next; |
||||
} entry; |
||||
|
||||
/* This method of array initialization is GNU C extension and
|
||||
* may not work with other compilers. Not even g++ |
||||
*/ |
||||
entry hashmap[100] = {[0 ... 99] = (entry){.data = -1, .next = NULL}}; |
||||
int size = 0; |
||||
|
||||
int abs(int i); |
||||
|
||||
int main(void) |
||||
{
|
||||
printf("Enter file name: "); |
||||
char filename[257]; |
||||
// Assuming filename/file path won't be longer than 256 characters
|
||||
scanf("%256s", filename); |
||||
|
||||
FILE* file = fopen(filename, "r"); |
||||
if (!file) |
||||
{ |
||||
perror(filename); |
||||
exit(EXIT_FAILURE); |
||||
} |
||||
|
||||
int num; |
||||
int key; |
||||
entry * node; |
||||
while (fscanf(file, "%d", &num) != EOF) |
||||
{ |
||||
key = abs(num%100); |
||||
if (hashmap[key].data == -1) // empty
|
||||
hashmap[key].data = num; |
||||
else // chaining
|
||||
{ |
||||
node = &hashmap[key]; |
||||
while (node->next != NULL) |
||||
{ |
||||
node = node->next; |
||||
} |
||||
entry * new_entry = malloc(sizeof(entry)); |
||||
new_entry->data = num; |
||||
new_entry->next = NULL; |
||||
node->next = new_entry; |
||||
} |
||||
} |
||||
|
||||
int empty = 0; |
||||
for (int i=0; i < 100; i++) |
||||
{ |
||||
if (hashmap[i].data == -1) |
||||
empty++; |
||||
} |
||||
|
||||
int max_chain = 0; |
||||
int current_chain = 0; |
||||
for (int i=0; i < 100; i++) |
||||
{ |
||||
if (hashmap[i].data == -1) // if empty, chain is 0
|
||||
continue; |
||||
current_chain = 1; // if not empty, chain is at least 1 long
|
||||
node = hashmap[i].next; |
||||
while (node != NULL) |
||||
{ |
||||
current_chain++; |
||||
node = node->next; |
||||
} |
||||
if (current_chain > max_chain) |
||||
max_chain = current_chain; |
||||
} |
||||
|
||||
printf("Empty Entries: %d\nLongest Chain: %d\n", empty, max_chain); |
||||
|
||||
fclose(file); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int abs(int i) |
||||
{ |
||||
if (i < 0) |
||||
return -i; |
||||
return i; |
||||
} |
Loading…
Reference in new issue