使用动态数组和重复加倍的堆栈实现

时间:2018-06-13 04:20:23

标签: c data-structures dynamic stack allocation

我的代码输出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));*/
}

0 个答案:

没有答案