Реализация стека с использованием динамического массива и повторного удвоения - PullRequest
0 голосов
/ 13 июня 2018

Мой код дает вывод 10 10 30, но он должен давать 5 5 10. Пожалуйста, кто-нибудь, помогите.Я новичок в структурах данных и хочу помочь.Я думаю, что что-то не так с распределением.пожалуйста, кто-нибудь направит меня.Мой код дает вывод 10 10 30, но он должен дать 5 5 10. Пожалуйста, кто-нибудь помогите.Я новичок в структурах данных и хочу помочь.Я думаю, что что-то не так с распределением.пожалуйста, кто-нибудь направит меня.Я новичок в структурах данных и хочу помочь.Я думаю, что что-то не так с распределением.пожалуйста, кто-нибудь направит меня.

#include<stdio.h>
#include<stdlib.h>
    struct DynArrayStack{
        int top;
        int capacity;
        int *array;
    };
struct DynArrayStack *CreateStack(){
    struct DynArrayStack *S=malloc(sizeof(struct DynArrayStack));
    if(!S){
        return NULL;
    }
        S->capacity=1;
        S->top=-1;
        S->array=malloc(S->capacity*sizeof(int));
    if(!S->array){
        return NULL;
    }
    return S;
}
int isEmptyStack(struct DynArrayStack *S){
    return(S->top==-1);
}
int isFullStack(struct DynArrayStack *S){
    return(S->top==S->capacity-1);
}
void DoubleStack(struct DynArrayStack *S){
    S->capacity*=2;
    S->array=realloc(S->array,S->capacity*sizeof(int));
}
void pushStack(struct DynArrayStack *S, int data){
    if(isFullStack(S)){
        DoubleStack(S);
    }
    else{
        S->array[++S->top]=data;
    }
}
int popStack(struct DynArrayStack *S){
    if(isEmptyStack(S)){
        printf("Stack Underflow.\n");
        return 0;
    }
    else{
        return(S->array[S->top--]);

    }
}
int Top(struct DynArrayStack *S){
    if(isEmptyStack(S)){
        return 0;
    }
    return S->array[S->top];
}
void deleteStack(struct DynArrayStack *S){
    if(S){
        if(S->array){
            free(S->array);
        }
        free(S);
    } 
}
void insertBottom(struct DynArrayStack *S, int data){
    int temp;
    if(isEmptyStack(S)){
        pushStack(S, data);
        return;
    }
    temp=popStack(S);
    insertBottom(S, data);
    pushStack(S, temp);
}
void reverseStack(struct DynArrayStack *S){
    int data;
    if(isEmptyStack(S)){
        return;
    }
    data=popStack(S);
    reverseStack(S);
    insertBottom(S, data);
}
int main(){
    struct DynArrayStack *Stack=CreateStack();
    pushStack(Stack, 30);
    pushStack(Stack, 20);
    pushStack(Stack, 10);
    pushStack(Stack, 05);
    printf("%d\n", Top(Stack));
    printf("%d\n", popStack(Stack));
    printf("%d\n", Top(Stack));
    /*reverseStack(Stack);
    printf("%d\n", Top(Stack));*/
}
...