1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <stdlib.h> #include <stdio.h> typedef struct Stack { int top, length, sizeofeach; void* start_ptr[]; } Stack; Stack* init_stack(int n_items, int sizeofeach) { Stack* stack; stack = malloc(sizeof(int) * 3 + sizeof(void*) * n_items); stack->top = -1; stack->length = n_items; stack->sizeofeach = sizeofeach; return stack; } Stack* increase_stacksize(Stack* stack, int n_itemsToAdd) { Stack* newstack; newstack = realloc(stack, sizeof(*stack) + sizeof(void*) * (n_itemsToAdd + stack->length)); if(newstack != NULL) //printf("\nDebug print - array reallocated\n"); free(stack); stack = newstack; stack->length += n_itemsToAdd; return stack; } Stack* push(Stack* stack, void* item) { if(stack->top + 1 == stack->length){ stack = increase_stacksize(stack, 10); } int pos = stack->top + 1; stack->start_ptr[pos] = item; ++(stack->top); return stack; } void printstack(Stack* stack) { printf("Number of items in the stack = %d\n", stack->top + 1); printf("Capacity of the stack = %d\n", stack->length); printf("Elements in the stack are: \n"); int i; for(i = 0; i <= stack->top; i++){ int* item_ptr; void* address; address = stack->start_ptr[i]; item_ptr = (int*)address; printf("Position = %d, Item = %d \n", i, *item_ptr); } } int main(void) { Stack* stack; stack = init_stack(5, sizeof(int)); int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int i; for(i = 0; i < 10; i++) { stack = push(stack, (void*)(a+i)); } printstack(stack); //free(stack); return 1; } |
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnR5cGVkZWYgc3RydWN0IFN0YWNrCnsKICAgIGludCB0b3AsIGxlbmd0aCwgc2l6ZW9mZWFjaDsKICAgIHZvaWQqIHN0YXJ0X3B0cltdOwp9IFN0YWNrOwoKU3RhY2sqIGluaXRfc3RhY2soaW50IG5faXRlbXMsIGludCBzaXplb2ZlYWNoKQp7CiAgICBTdGFjayogc3RhY2s7CiAgICBzdGFjayA9IG1hbGxvYyhzaXplb2YoaW50KSAqIDMgKyBzaXplb2Yodm9pZCopICogbl9pdGVtcyk7CgogICAgc3RhY2stPnRvcCA9IC0xOwogICAgc3RhY2stPmxlbmd0aCA9IG5faXRlbXM7CiAgICBzdGFjay0+c2l6ZW9mZWFjaCA9IHNpemVvZmVhY2g7CgogICAgcmV0dXJuIHN0YWNrOwp9CgpTdGFjayogaW5jcmVhc2Vfc3RhY2tzaXplKFN0YWNrKiBzdGFjaywgaW50IG5faXRlbXNUb0FkZCkKewogICAgU3RhY2sqIG5ld3N0YWNrOyAgICAKICAgIG5ld3N0YWNrID0gcmVhbGxvYyhzdGFjaywgc2l6ZW9mKCpzdGFjaykgKyBzaXplb2Yodm9pZCopICogKG5faXRlbXNUb0FkZCArIHN0YWNrLT5sZW5ndGgpKTsKICAgIAogICAgaWYobmV3c3RhY2sgIT0gTlVMTCkKICAgICAgICAvL3ByaW50ZigiXG5EZWJ1ZyBwcmludCAtIGFycmF5IHJlYWxsb2NhdGVkXG4iKTsKCiAgICBmcmVlKHN0YWNrKTsKICAgIHN0YWNrID0gbmV3c3RhY2s7CgogICAgc3RhY2stPmxlbmd0aCArPSBuX2l0ZW1zVG9BZGQ7CgogICAgcmV0dXJuIHN0YWNrOwp9CgpTdGFjayogcHVzaChTdGFjayogc3RhY2ssIHZvaWQqIGl0ZW0pCnsKICAgIGlmKHN0YWNrLT50b3AgKyAxID09IHN0YWNrLT5sZW5ndGgpewogICAgICAgIAogICAgICAgIHN0YWNrID0gaW5jcmVhc2Vfc3RhY2tzaXplKHN0YWNrLCAxMCk7CiAgICB9CgogICAgaW50IHBvcyA9IHN0YWNrLT50b3AgKyAxOwoKICAgIHN0YWNrLT5zdGFydF9wdHJbcG9zXSA9IGl0ZW07CiAgICArKyhzdGFjay0+dG9wKTsKICAgIAogICAgcmV0dXJuIHN0YWNrOwp9Cgp2b2lkIHByaW50c3RhY2soU3RhY2sqIHN0YWNrKQp7CiAgICBwcmludGYoIk51bWJlciBvZiBpdGVtcyBpbiB0aGUgc3RhY2sgPSAlZFxuIiwgc3RhY2stPnRvcCArIDEpOwogICAgcHJpbnRmKCJDYXBhY2l0eSBvZiB0aGUgc3RhY2sgPSAlZFxuIiwgc3RhY2stPmxlbmd0aCk7CgogICAgcHJpbnRmKCJFbGVtZW50cyBpbiB0aGUgc3RhY2sgYXJlOiBcbiIpOwoKICAgIGludCBpOwoKICAgIGZvcihpID0gMDsgaSA8PSBzdGFjay0+dG9wOyBpKyspewogICAgICAgIGludCogaXRlbV9wdHI7CiAgICAgICAgdm9pZCogYWRkcmVzczsKCiAgICAgICAgYWRkcmVzcyA9IHN0YWNrLT5zdGFydF9wdHJbaV07CgogICAgICAgIGl0ZW1fcHRyID0gKGludCopYWRkcmVzczsKCiAgICAgICAgcHJpbnRmKCJQb3NpdGlvbiA9ICVkLCBJdGVtID0gJWQgXG4iLCBpLCAqaXRlbV9wdHIpOwogICAgfQp9CgppbnQgbWFpbih2b2lkKQp7ICAgIAogICAgU3RhY2sqIHN0YWNrOwogICAgc3RhY2sgPSBpbml0X3N0YWNrKDUsIHNpemVvZihpbnQpKTsKCiAgICBpbnQgYVtdID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwfTsKICAgIGludCBpOwogICAgCiAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQogICAgewogICAgICAgIHN0YWNrID0gcHVzaChzdGFjaywgKHZvaWQqKShhK2kpKTsKICAgIH0KCiAgICBwcmludHN0YWNrKHN0YWNrKTsKICAgIAogICAgLy9mcmVlKHN0YWNrKTsKICAgIAogICAgcmV0dXJuIDE7Cn0=
-
upload with new input
-
result: Runtime error time: 0.01s memory: 1808 kB signal: -1
Number of items in the stack = 10 Capacity of the stack = 15 Elements in the stack are: Position = 0, Item = 1 Position = 1, Item = 2 Position = 2, Item = 3 Position = 3, Item = 4 Position = 4, Item = 5 Position = 5, Item = 6 Position = 6, Item = 7 Position = 7, Item = 8 Position = 8, Item = 9 Position = 9, Item = 10


