You can do something like this
# include <stdio.h> int totalElements = 0; struct { int index, data; } Data[10000]; void addElement(int index, int data) { Data[totalElements].data = data; Data[totalElements++].index = index; } main() { int i; addElement(334, 30); addElement(563, 50); addElement(989, 90); for (i = 0; i < totalElements; i++) { printf("%d %d\n", Data[i].data, Data[i].index); } }
Exit
30 334 50 563 90 989
It also suffers from the same limitations that Jonathan Leffler mentioned.
EDIT
# include <stdio.h> int totalElements = 0; struct { int index, currentElement = 0, data[100]; } Data[10000]; void addElement(int index, int data) { int i; for (i = 0; i < totalElements; i++) { if (Data[i].index == index) { Data[i].data[Data[i].currentElement++] = data; return; } } Data[totalElements].data[Data[totalElements].currentElement++] = data; Data[totalElements++].index = index; } main() { int i, j; addElement(334, 30); addElement(334, 40); addElement(563, 50); addElement(563, 60); addElement(989, 80); addElement(989, 90); for (i = 0; i < totalElements; i++) { for (j = 0; j < Data[i].currentElement; j++) { printf("%d %d\n", Data[i].index, Data[i].data[j]); } } }
Exit
334 30 334 40 563 50 563 60 989 80 989 90
Using this idea, you can overcome the limitations mentioned by Jonathan Leffler.
source share