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