c++ stack




用C中的链表实现栈 (2)

我可以看到几个问题:

1) printStack(&stack); 应该是printStack(stackPtr); 因为您正在将stackPtr地址stackPtr给push函数。

2)

node = (StackNodePtr)malloc(sizeof(StackNodePtr));

应该:

node = malloc(sizeof(StackNode));

3)

push(stackPtr, 'a');

应该:

push(&stackPtr, 'a');

因为你需要传递顶端指针的地址。

我在使用带有struct的链表实现堆栈时遇到了麻烦。 该程序编译好,但是当我运行它,打印第一个元素,但然后读取下一个节点为NULL。 我认为这可能是一个错误,我的堆栈传递的方法,但我不知道,我没有成功地解决这个问题,所以我要求你的帮助:

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

struct stackNode{
    char data;
    struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;

void convertToPostfix(char infix[], char postfix[]);
int isOperator(char c);
int precedence(char operator1, char operator2);
void push(StackNodePtr *topPtr, char value);
char pop(StackNodePtr *topPtr);
char stackTop(StackNodePtr topPtr);
int isEmpty(StackNodePtr topPtr);
void printStack(StackNodePtr topPtr);

int main(){
    convertToPostfix(NULL, NULL);
    return 0;
}

void convertToPostfix(char infix[], char postfix[]){
    StackNode stack = {'(', NULL};
    StackNodePtr stackPtr = &stack;
    push(stackPtr, 'a');

    //printf("%s\n", stackPtr->data);
    printStack(&stack);
}

void push(StackNodePtr *topPtr, char value){
        StackNode *node;
        node=(StackNodePtr)malloc(sizeof(StackNodePtr));

        node->data=value;
        node->nextPtr=*topPtr;
        *topPtr=node;
}

void printStack(StackNodePtr topPtr){
    if(topPtr == NULL){
        printf("%s\n", "NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
        return;
    }

    printf("%c\n", topPtr->data);
    printStack(topPtr->nextPtr);
}

任何帮助,将不胜感激。

谢谢


这是不正确的:

node=(StackNodePtr)malloc(sizeof(StackNodePtr));

因为它只为struct stackNode* (通常是4字节的任何指针类型)分配内存,当它应该为struct stackNode (至少5个字节)分配内存时:

node = malloc(sizeof(StackNode));

-

请参阅我输入malloc的结果吗?





stack