鱼C论坛

 找回密码
 立即注册
查看: 5486|回复: 2

[已解决]堆栈的实现,不知为何运行结果很奇怪!求大佬指导

[复制链接]
发表于 2021-4-5 12:46:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 10

typedef struct stack{
        int top;
        int data[MAX_SIZE];
}stack;

void init_stack(stack a){
        a.top=-1;
        a.data[]
}

int stack_empty(stack a){
        if(a.top==-1) return 1;
        else return 0;
}

void show(stack a){
        if(stack_empty) printf("An empty stack!");
        int temp = a.top;
        while(temp>=0){
                printf("%d ",a.data[temp]);
                temp--;
        }
        printf("\n");
}

void push(stack a,int new_push){
        if(MAX_SIZE-1==a.top) printf("Full stack!Stop insert data!");
        else{
                ++a.top;
                a.data[a.top]=new_push;
        } 
}

void pop(stack a){
        if(stack_empty) printf("An empty stack!");
        else a.top--;
}

int get_top_elem(stack a){
        return a.data[a.top];
}

int main(){
        int i;
        stack a;
        init_stack(a);
        //show(a);
        for(i = 0;i<10;i++) {
                push(a,i);
                show(a);
        }
        pop(a);
        show(a);
        return 0;
}
最佳答案
2021-4-8 19:39:17
本帖最后由 李京 于 2021-4-8 19:43 编辑

你的函数都应该传入指针,不能直接传入,这是传值和传地址的区别

你的程序  21 和 39 if 判断的条件,调用函数没有加 ()  

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 10

typedef struct stack {
    int top;
    int data[MAX_SIZE];
}*stack, sta; // 这里的名字我随便取的   这里我修改了  stack 变成了 指针类型的了

void init_stack(stack a) { // 传入指针
    a->top = -1;
    a->data[0] = 0;
}

int stack_empty(stack a) {
    if (a->top == -1)
    {
        printf("t->top  ==  %d   ", a->top);
        return 1;
    }
    else return 0;
}

void show(stack a) {
    if (stack_empty(a)) printf("An empty stack!"); // 这里我改了
    int temp = a->top;
    while (temp >= 0) {
        printf("%d ", a->data[temp]);
        temp--;
    }
    printf("\n");
}

void push(stack a, int new_push) {
    if (MAX_SIZE - 1 == a->top) printf("Full stack!Stop insert data!");
    else {
        ++a->top;
        a->data[a->top] = new_push;
    }
}

void pop(stack a) {
    if (stack_empty(a)) printf("An empty stack!"); // 这里的条件我改了
    else a->top--;
}

int get_top_elem(stack a) {
    return a->data[a->top];
}

int main() {
    int i;
    sta a; 
    init_stack(&a); //  传入地址
    //show(a);
    for (i = 0; i < 10; i++) {
        push(&a, i);
        show(&a);
    }
    pop(&a);
    show(&a);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-8 19:39:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 李京 于 2021-4-8 19:43 编辑

你的函数都应该传入指针,不能直接传入,这是传值和传地址的区别

你的程序  21 和 39 if 判断的条件,调用函数没有加 ()  

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 10

typedef struct stack {
    int top;
    int data[MAX_SIZE];
}*stack, sta; // 这里的名字我随便取的   这里我修改了  stack 变成了 指针类型的了

void init_stack(stack a) { // 传入指针
    a->top = -1;
    a->data[0] = 0;
}

int stack_empty(stack a) {
    if (a->top == -1)
    {
        printf("t->top  ==  %d   ", a->top);
        return 1;
    }
    else return 0;
}

void show(stack a) {
    if (stack_empty(a)) printf("An empty stack!"); // 这里我改了
    int temp = a->top;
    while (temp >= 0) {
        printf("%d ", a->data[temp]);
        temp--;
    }
    printf("\n");
}

void push(stack a, int new_push) {
    if (MAX_SIZE - 1 == a->top) printf("Full stack!Stop insert data!");
    else {
        ++a->top;
        a->data[a->top] = new_push;
    }
}

void pop(stack a) {
    if (stack_empty(a)) printf("An empty stack!"); // 这里的条件我改了
    else a->top--;
}

int get_top_elem(stack a) {
    return a->data[a->top];
}

int main() {
    int i;
    sta a; 
    init_stack(&a); //  传入地址
    //show(a);
    for (i = 0; i < 10; i++) {
        push(&a, i);
        show(&a);
    }
    pop(&a);
    show(&a);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-4-17 23:42:50 | 显示全部楼层
李京 发表于 2021-4-8 19:39
你的函数都应该传入指针,不能直接传入,这是传值和传地址的区别

你的程序  21 和 39 if 判断的条件,调 ...

感谢!!!搞了好久了都没搞懂!!
!!!谢谢您!!
看了您改动后的代码如沐春风
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表