Upload files to 'Exercise 5 - Hash Map (Week 6)'
This commit is contained in:
parent
0e9442b99d
commit
eafd7a3665
BIN
Exercise 5 - Hash Map (Week 6)/Ex5.pdf
Normal file
BIN
Exercise 5 - Hash Map (Week 6)/Ex5.pdf
Normal file
Binary file not shown.
100
Exercise 5 - Hash Map (Week 6)/Ex5.txt
Normal file
100
Exercise 5 - Hash Map (Week 6)/Ex5.txt
Normal file
@ -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
|
BIN
Exercise 5 - Hash Map (Week 6)/Ex5_Prof_Solution.pdf
Normal file
BIN
Exercise 5 - Hash Map (Week 6)/Ex5_Prof_Solution.pdf
Normal file
Binary file not shown.
100
Exercise 5 - Hash Map (Week 6)/ex5.c
Normal file
100
Exercise 5 - Hash Map (Week 6)/ex5.c
Normal file
@ -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;
|
||||
}
|
2
Exercise 5 - Hash Map (Week 6)/makefile
Normal file
2
Exercise 5 - Hash Map (Week 6)/makefile
Normal file
@ -0,0 +1,2 @@
|
||||
ex5: ex5.c
|
||||
gcc -std=gnu11 -Wall -o ex5 ex5.c
|
Loading…
Reference in New Issue
Block a user