zzk.213 2022-09-23 00:46 采纳率: 87.8%
浏览 55
已结题

最后的DestroyStack我这么写好像跑了不会停止 就是说main函数最后一条线为什么print不出来


#include<stdio.h>
#include<stdlib.h>
typedef struct{
    double* values;
    int top;
    int maxTop;
} Stack;

bool CreateStack(Stack* stack, int size) {
    if (size <= 0)
        return false;
    stack->values = (double*)malloc(sizeof(double) * size);
    stack->top = -1; 
    stack->maxTop = size - 1;//max的最大index是size-1
        return true;
}
bool IsEmpty(Stack* stack) {
    if (stack->top == -1)
        return true;
    else
        return false;
}
bool IsFull(Stack* stack) {
    if (stack->top == stack->maxTop)
        return true;
    else
        return false;
}
bool Top(Stack* stack, double* x) {
    if (stack->top == -1) {
        return false;
    }
    else {
        *x = stack->values[stack->top];
        return true;
    }
}
bool Push(Stack* stack, double x) {
    if (IsFull(stack))
        return false;
    stack->values[++stack->top] = x;
    return true;
}
bool Pop(Stack* stack, double* x) {
    if (stack->top == -1)
        return false;
    else {
        *x = stack->values[stack->top];//
        stack->top--;
        return true;
    }
}
/*void DisplayStack(Stack* stack) {
    int i;
    for (i = stack->top; i > 0; i--) {
        printf("%d\n", stack->values[i]);
    }*/
void DestroyStack(Stack** pstack) {
    free((*pstack) ->values);
    free(*pstack);
    *pstack= NULL;
    //frees the memory occupied by the stack values and stack struct
    // 将stack values和stack struct占用的内存free掉
    //point the stack to NULL
    //将stack指向NULL

}

#include "stack.h"
#include<stdio.h>
#include<stdlib.h>

void DisplayStack(Stack* stack)
{
if (IsEmpty(stack) == false)
{
int cur = stack->top;
while (cur >= 0)
{
printf("%f\n", stack->values[cur -- ]);
}
}
}

int main() {
Stack* stack = (Stack*)malloc(sizeof(Stack));
double val;
CreateStack(stack, 5);
Push(stack, 5);
Push(stack, 6.5);
Push(stack, -3);
Push(stack, -8);
DisplayStack(stack);

printf("-------------------\n");
if(Top(stack, &val))
    printf("Top: %.2f\n", val);
Pop(stack, &val);
if(Top(stack, &val))
    printf("Top: %.2f\n", val);
printf("-------------------\n");

while(!IsEmpty(stack))
    Pop(stack, &val);
DisplayStack(stack);
printf("-------------------\n");

Push(stack,5);
DisplayStack(stack);
printf("-------------------\n");
DestroyStack(&stack);
DisplayStack(stack);
printf("-------------------\n");

}


```c


```

展开全部

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-09-23 02:54
    关注

    这么改,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <crtdbg.h>
    typedef struct {
        double* values;
        int top;
        int maxTop;
    } Stack;
    
    bool CreateStack(Stack** stack, int size) {
        if (size <= 0)
            return false;
        (*stack) = (Stack*)malloc(sizeof(Stack));
        (*stack)->values = (double*)malloc(sizeof(double) * size);
        (*stack)->top = -1;
        (*stack)->maxTop = size - 1;//max的最大index是size-1
        return true;
    }
    bool IsEmpty(Stack* stack) {
        if (stack->top == -1)
            return true;
        else
            return false;
    }
    bool IsFull(Stack* stack) {
        if (stack->top == stack->maxTop)
            return true;
        else
            return false;
    }
    bool Top(Stack* stack, double* x) {
        if (stack->top == -1) {
            return false;
        }
        else {
            *x = stack->values[stack->top];
            return true;
        }
    }
    bool Push(Stack* stack, double x) {
        if (IsFull(stack))
            return false;
        stack->values[++stack->top] = x;
        return true;
    }
    bool Pop(Stack* stack, double* x) {
        if (stack->top == -1)
            return false;
        else {
             *x = stack->values[stack->top];//
            stack->top--;
            return true;
        }
    }
    void DisplayStack(Stack* stack) {
        int i;
        for (i = stack->top; i >= 0; i--) {
            printf("%f ", stack->values[i]);
        }
        printf("\n");
    }
    void DestroyStack(Stack** pstack) {
        free((*pstack)->values);
        free(*pstack);
        (*pstack) = NULL;
        //frees the memory occupied by the stack values and stack struct
        // 将stack values和stack struct占用的内存free掉
        //point the stack to NULL
        //将stack指向NULL
    }
    int main()
    {
        double x = 0;
        Stack* s;
        CreateStack(&s, 5);
        Push(s, 1.1);
        Push(s, 2.1);
        Push(s, 3.1);
        DisplayStack(s);
    
        Pop(s, &x);
        printf("Pop:%f\n", x);
    
        DestroyStack(&s);
        return 0;
    }
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    qzjhjxj 回复 zzk.213 2022-09-23 04:46

    什么错误提示?

    回复
    qzjhjxj 回复 zzk.213 2022-09-23 05:04

    img

    回复
    qzjhjxj 回复 zzk.213 2022-09-23 08:39

    这么改下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
    
        double* values;
        int top;
        int maxTop;
    } Stack;
    
    bool CreateStack(Stack* stack, int size) {
        if (!stack || size <= 0)
            return false;
        stack->values = (double*)malloc(sizeof(double) * size);
        stack->top = -1;
        stack->maxTop = size - 1;//max的最大index是size-1
        return true;
    }
    bool IsEmpty(Stack* stack) {
        if (!stack || stack->top == -1)
            return true;
        else
            return false;
    }
    bool IsFull(Stack* stack) {
        if (!stack || stack->top == stack->maxTop)
            return true;
        else
            return false;
    }
    bool Top(Stack* stack, double* x) {
        if (!stack || stack->top == -1) {
            return false;
        }
        else {
            *x = stack->values[stack->top];
            return true;
        }
    }
    bool Push(Stack* stack, double x) {
        if (!stack || IsFull(stack))
            return false;
        stack->values[++stack->top] = x;
        return true;
    }
    bool Pop(Stack* stack, double* x) {
        if (!stack || stack->top == -1)
            return  false;
        else {
             *x = stack->values[stack->top];//
            stack->top--;
            return true;
        }
    }
    
    //void DisplayStack(Stack* stack) {
    //    int i;
    //    for (i = stack->top; i >= 0; i--) {
    //        printf("%f ", stack->values[i]);
    //    }
    //    printf("\n");
    //}
    
    void DisplayStack(Stack* stack)
    {
        if (IsEmpty(stack) == false)
        {
            int cur = stack->top;
            while (cur >= 0)
            {
                printf("%f\n", stack->values[cur--]);
            }
        }
    }
    void DestroyStack(Stack** pstack) { 
        free((*pstack)->values);
        free((*pstack));
        (*pstack) = NULL;
        //frees the memory occupied by the stack values and stack struct
        // 将stack values和stack struct占用的内存free掉
        //point the stack to NULL
        //将stack指向NULL
    }
    
    //#include "stack.h"
    //#include<stdio.h>
    //#include<stdlib.h>
    
    int main() {
        Stack* stack = (Stack*)malloc(sizeof(Stack));
        double val;
        CreateStack(stack, 5);
        Push(stack, 5);
        Push(stack, 6.5);
        Push(stack, -3);
        Push(stack, -8);
        DisplayStack(stack);
    
        printf("-------------------\n");
        if (Top(stack, &val))
            printf("Top: %.2f\n", val);
        Pop(stack, &val);
        if (Top(stack, &val))
            printf("Top: %.2f\n", val);
        printf("-------------------\n");
    
        while (!IsEmpty(stack))
            Pop(stack, &val);
        DisplayStack(stack);
        printf("-------------------\n");
    
        Push(stack, 5);
        DisplayStack(stack);
        printf("-------------------\n");
        DestroyStack(&stack); 
        DisplayStack(stack);
        printf("-------------------\n");
    }
    
    

    回复
    展开全部7条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月27日
  • 修改了问题 9月23日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部