#include <stdio.h>
#include <stdlib.h>
typedef struct element element;
typedef struct hashTable hashTable;
struct element {
int value;
element *next;
element *tail;
};
struct hashTable {
element **table;
int size;
};
hashTable *createHashTable(int size) {
int i;
hashTable
*newHashTable
= (hashTable
*) malloc(sizeof(hashTable
)); newHashTable->size = size;
newHashTable
->table
= (element
**) malloc(size
*sizeof(element
)); for (i = 0; i < size; i++) {
newHashTable->table[i] = NULL;
}
return newHashTable;
}
void put(hashTable *ht, int d) {
int key = d % ht->size;
element
*newElement
= (element
*) malloc(sizeof(element
)); newElement->value = d;
newElement->next = NULL;
if(ht->table[key] == NULL) {
newElement->tail = newElement;
ht->table[key] = newElement;
} else {
ht->table[key]->tail->next = newElement;
ht->table[key]->tail = newElement;
}
}
void printList(hashTable *ht) {
int i;
element *j;
for(i = 0; i < ht->size; i++) {
j = ht->table[i];
while(j != NULL) {
j = j->next;
}
}
}
int main() {
int n, m, c, d;
while(n--) {
hashTable *ht = createHashTable(m);
while(c--) {
put(ht, d);
}
printList(ht);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IGVsZW1lbnQgZWxlbWVudDsKdHlwZWRlZiBzdHJ1Y3QgaGFzaFRhYmxlIGhhc2hUYWJsZTsKCnN0cnVjdCBlbGVtZW50IHsKCWludCB2YWx1ZTsKCWVsZW1lbnQgKm5leHQ7CgllbGVtZW50ICp0YWlsOwp9OwoKc3RydWN0IGhhc2hUYWJsZSB7CgllbGVtZW50ICoqdGFibGU7CglpbnQgc2l6ZTsKfTsKCmhhc2hUYWJsZSAqY3JlYXRlSGFzaFRhYmxlKGludCBzaXplKSB7CglpbnQgaTsKCWhhc2hUYWJsZSAqbmV3SGFzaFRhYmxlID0gKGhhc2hUYWJsZSopIG1hbGxvYyhzaXplb2YoaGFzaFRhYmxlKSk7CgluZXdIYXNoVGFibGUtPnNpemUgPSBzaXplOwoJbmV3SGFzaFRhYmxlLT50YWJsZSA9IChlbGVtZW50KiopIG1hbGxvYyhzaXplKnNpemVvZihlbGVtZW50KSk7Cglmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CgkJbmV3SGFzaFRhYmxlLT50YWJsZVtpXSA9IE5VTEw7Cgl9CgoJcmV0dXJuIG5ld0hhc2hUYWJsZTsKfQoKdm9pZCBwdXQoaGFzaFRhYmxlICpodCwgaW50IGQpIHsKCWludCBrZXkgPSBkICUgaHQtPnNpemU7CgllbGVtZW50ICpuZXdFbGVtZW50ID0gKGVsZW1lbnQqKSBtYWxsb2Moc2l6ZW9mKGVsZW1lbnQpKTsKCW5ld0VsZW1lbnQtPnZhbHVlID0gZDsKCW5ld0VsZW1lbnQtPm5leHQgPSBOVUxMOwoJaWYoaHQtPnRhYmxlW2tleV0gPT0gTlVMTCkgewoJCW5ld0VsZW1lbnQtPnRhaWwgPSBuZXdFbGVtZW50OwoJCWh0LT50YWJsZVtrZXldID0gbmV3RWxlbWVudDsKCX0gZWxzZSB7CgkJaHQtPnRhYmxlW2tleV0tPnRhaWwtPm5leHQgPSBuZXdFbGVtZW50OwoJCWh0LT50YWJsZVtrZXldLT50YWlsID0gbmV3RWxlbWVudDsgCgl9Cn0KCnZvaWQgcHJpbnRMaXN0KGhhc2hUYWJsZSAqaHQpIHsKCWludCBpOwoJZWxlbWVudCAqajsKCWZvcihpID0gMDsgaSA8IGh0LT5zaXplOyBpKyspIHsKCQlwcmludGYoIiVkICIsIGkpOwoJCWogPSBodC0+dGFibGVbaV07CgkJd2hpbGUoaiAhPSBOVUxMKSB7CgkJCXByaW50ZigiLT4gJWQgIiwgai0+dmFsdWUpOwoJCQlqID0gai0+bmV4dDsKCQl9CgkJcHJpbnRmKCItPiBcXG4iKTsKCX0KCn0KCmludCBtYWluKCkgewoJaW50IG4sIG0sIGMsIGQ7CglzY2FuZigiJWQiLCAmbik7Cgl3aGlsZShuLS0pIHsKCQlzY2FuZigiJWQlZCIsICZtLCAmYyk7CgkJaGFzaFRhYmxlICpodCA9IGNyZWF0ZUhhc2hUYWJsZShtKTsKCQl3aGlsZShjLS0pIHsKCQkJc2NhbmYoIiVkIiwgJmQpOwoJCQlwdXQoaHQsIGQpOwoJCX0KCQlwcmludExpc3QoaHQpOwoJfQoKCXJldHVybiAwOwp9