繁体   English   中英

在C Issue中显示堆栈链接列表

[英]Displaying stack linked list in C Issue

这是源代码:

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


struct Fraction{
    int num;
    int denom;
};

typedef struct Fraction Frac;
typedef Frac* FracPtr;

struct FracNode {
    Frac fr;
    struct FracNode* next;
};

typedef struct FracNode FrNode;
typedef FrNode* FrNodePtr;

struct FracStack {
    int stkSize;
    FrNodePtr frNodePtr;
};

typedef struct FracStack FrStk;
typedef FrStk* FrStkPtr;

FrNodePtr createFrNode(void);
FrStkPtr createFrNodeStk(void);
void pushFrNode(FrStkPtr*, FrNodePtr);
void printStack(FrStkPtr);

int main() {

    FrNodePtr frNodeTmpPtr = 0;
    FrNodePtr frNodeTmpPtr2 = 0;
    FrStkPtr frStkPtr = 0;
    frNodeTmpPtr = createFrNode();
    frStkPtr = createFrNodeStk();
    pushFrNode(&frStkPtr, frNodeTmpPtr);
    printStack(frStkPtr);

    frNodeTmpPtr2 = createFrNode();
    pushFrNode(&frStkPtr, frNodeTmpPtr2);
    printStack(frStkPtr); // Only the newly created fraction is printed. frNodeTmpPtr didn't get printed as part of the stack. Is there an issue with my print function or the push function?

    free (frNodeTmpPtr);
    free (frNodeTmpPtr2);
    free (frStkPtr);
    return 0;
}


//Print Stack
void printStack(FrStkPtr stkPtr) {

    while (stkPtr->frNodePtr != 0) {
        printf("Numerator: %d & Denominator: %d\n\n", stkPtr->frNodePtr->fr.num, stkPtr->frNodePtr->fr.denom);
        stkPtr->frNodePtr = stkPtr->frNodePtr->next;
    }

    return;
}

//Push Node
void pushFrNode(FrStkPtr* stkPtr, FrNodePtr nPtr) {

    if ((*stkPtr)->frNodePtr != 0) {
        nPtr->next = ((*stkPtr))->frNodePtr;
    }

    (*stkPtr)->frNodePtr = nPtr;
    (*stkPtr)->stkSize++;

    return;
}

//Create Stack
FrStkPtr createFrNodeStk() {

    FrStkPtr frStkPtr;
    frStkPtr = (FrStkPtr) malloc (sizeof(FrStk));
    frStkPtr->stkSize = 0;
    frStkPtr->frNodePtr = 0;

    return frStkPtr;
}

//Create Node
FrNodePtr createFrNode() {

    FrNodePtr frNodePtr;
    frNodePtr = (FrNodePtr) malloc (sizeof(FrNode));
    frNodePtr->next = 0;

    printf("Enter the numerator: ");
    scanf("%d", &(frNodePtr->fr.num));

    do {
        printf("\nEnter a non-zero denominator: ");
        scanf("%d", &(frNodePtr->fr.denom));
        if (frNodePtr->fr.denom < 0) {
            frNodePtr->fr.denom = -(frNodePtr->fr.denom);
            frNodePtr->fr.num = -(frNodePtr->fr.num);
        }
    } while (frNodePtr->fr.denom == 0);

    return frNodePtr;
}

总的来说,我创建了一个分数,将其推入创建的堆栈中。 打印出来。 然后,我创建了另一个分数,将其推入堆栈并打印。 问题是当我打印出堆栈时,它只打印出创建的最后一个分数,而不是两个分数。

样品运行:

输入分子:1

输入非零分母:1

分子:1&分母:1

输入分子:2

输入非零分母:2

分子:2&分母:2 //我希望这部分打印出1/1和2/2而不是2/2

将打印功能更改为以下内容:

//Print Stack
void printStack(FrStkPtr stkPtr) {
    FrNodePtr pointer = stkPtr->frNodePtr;
    while (pointer != 0) {
        printf("Numerator: %d & Denominator: %d\n\n", pointer->fr.num, pointer->fr.denom);
        pointer = pointer->next;
    }
    return;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM