#include <stdio.h>
#include <stdlib.h>
struct Stack {
int capacity;
int index;
int *data;
};
struct Stack * CreateStacks(int numberOfStacks)
{
// Should always check return from malloc for NULL...
struct Stack
*stack
= malloc(numberOfStacks
* sizeof(struct Stack
)); for (int i = 0; i < numberOfStacks; i++) {
stack[i].capacity = 10;
stack[i].index = 0;
stack
[i
].
data = malloc(10 * sizeof(int)); }
return stack;
}
void FreeStacks(struct Stack *stack, int numberOfStacks)
{
for (int i = 0; i < numberOfStacks; i++) {
}
}
void Push(struct Stack *stack, int value) {
// Check for reallocation
if (stack->index == stack->capacity) {
stack->capacity *= 2; //Assumes capacity >= 1
stack
->data
= realloc(stack
->data
, sizeof(int) * stack
->capacity
); }
// Set the data
stack->data[stack->index++] = value;
}
int Pop(struct Stack *stack)
{
if (stack->index < 0) return 0; // Error
return stack->data[--stack->index];
}
int main(void) {
struct Stack *pml = CreateStacks(100);
// Assign some values to first stack
for (int i = 0; i < 25; i++) {
Push(&pml[0], i);
}
// Print values
for (int i = 0; i < 25; i++) {
}
FreeStacks(pml, 100);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBTdGFjayB7CiAgICBpbnQgY2FwYWNpdHk7CiAgICBpbnQgaW5kZXg7CiAgICBpbnQgKmRhdGE7Cn07CgpzdHJ1Y3QgU3RhY2sgKiBDcmVhdGVTdGFja3MoaW50IG51bWJlck9mU3RhY2tzKQp7CgkvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHJldHVybiBmcm9tIG1hbGxvYyBmb3IgTlVMTC4uLgoJc3RydWN0IFN0YWNrICpzdGFjayA9IG1hbGxvYyhudW1iZXJPZlN0YWNrcyAqIHNpemVvZihzdHJ1Y3QgU3RhY2spKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFja3M7IGkrKykgewoJCXN0YWNrW2ldLmNhcGFjaXR5ID0gMTA7CgkJc3RhY2tbaV0uaW5kZXggPSAwOwoJCXN0YWNrW2ldLmRhdGEgPSBtYWxsb2MoMTAgKiBzaXplb2YoaW50KSk7Cgl9CglyZXR1cm4gc3RhY2s7Cn0KCnZvaWQgRnJlZVN0YWNrcyhzdHJ1Y3QgU3RhY2sgKnN0YWNrLCBpbnQgbnVtYmVyT2ZTdGFja3MpCnsKCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFja3M7IGkrKykgewoJCWZyZWUoc3RhY2tbaV0uZGF0YSk7Cgl9CglmcmVlKHN0YWNrKTsKfQoKdm9pZCBQdXNoKHN0cnVjdCBTdGFjayAqc3RhY2ssIGludCB2YWx1ZSkgewogICAgLy8gQ2hlY2sgZm9yIHJlYWxsb2NhdGlvbgogICAgaWYgKHN0YWNrLT5pbmRleCA9PSBzdGFjay0+Y2FwYWNpdHkpIHsKICAgICAgICBzdGFjay0+Y2FwYWNpdHkgKj0gMjsgIC8vQXNzdW1lcyBjYXBhY2l0eSA+PSAxCiAgICAgICAgc3RhY2stPmRhdGEgPSByZWFsbG9jKHN0YWNrLT5kYXRhLCBzaXplb2YoaW50KSAqIHN0YWNrLT5jYXBhY2l0eSk7CiAgICB9CiAgICAvLyBTZXQgdGhlIGRhdGEKICAgIHN0YWNrLT5kYXRhW3N0YWNrLT5pbmRleCsrXSA9IHZhbHVlOwp9CgppbnQgUG9wKHN0cnVjdCBTdGFjayAqc3RhY2spCnsKCWlmIChzdGFjay0+aW5kZXggPCAwKSByZXR1cm4gMDsgLy8gRXJyb3IKCXJldHVybiBzdGFjay0+ZGF0YVstLXN0YWNrLT5pbmRleF07Cn0KCmludCBtYWluKHZvaWQpIHsKCXN0cnVjdCBTdGFjayAqcG1sID0gQ3JlYXRlU3RhY2tzKDEwMCk7CgkvLyBBc3NpZ24gc29tZSB2YWx1ZXMgdG8gZmlyc3Qgc3RhY2sKCWZvciAoaW50IGkgPSAwOyBpIDwgMjU7IGkrKykgewoJCVB1c2goJnBtbFswXSwgaSk7Cgl9CgkvLyBQcmludCB2YWx1ZXMKCWZvciAoaW50IGkgPSAwOyBpIDwgMjU7IGkrKykgewoJCXByaW50ZigiJWQgIiwgUG9wKCZwbWxbMF0pKTsKCX0KCQoJRnJlZVN0YWNrcyhwbWwsIDEwMCk7CglyZXR1cm4gMDsKfQo=