打印堆栈的元素



我的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
    char ch;
    struct node *next;
};
struct node *first,*top1,*newptr;
void push_back(char data) { //Pushes data into the stack
    if (first == NULL) {
        first = new node();
        first->next = NULL;
        first->ch = data;
    }
    else {
        first = new node();
        top1->next = first;
        top1->ch = data;
        first = top1;
    }
}
void display() {
    top1 = first;
    if (top1 == NULL){
        printf("Stack is empty");
        return;
    }
    while (top1 != NULL){
        printf("%c ", top1->ch);
        top1 = top1->next;
    }
}

main() {
    first = NULL;
    char EXP[100];
    scanf("%s",&EXP);
    system("cls");
    int len = strlen(EXP);
    for(int i=0;i<len;i++)
        push_back(EXP[i]);
    display();
    system("pause");
}

我的程序应该为用户获取一个字符串,然后每个字符都会被放在一个堆栈中,我会打印回字符串。当我运行代码时,它只能显示第一个字符。我是不是错过了什么?

第二次按下_back()时,会立即覆盖first

else {
    first = new node();    //oops
    top1->next = first;
    top1->ch = data;
    first = top1;

丢失了它以前指向的数据。

问题是top1未初始化,因此您的程序显示出未定义的行为。你很可能在first应该是top1:的地方打错了字

void push_back(char data) { //Pushes data into the stack
    // ...
    else {
        top1 = new node();
        top1->next = first;
        top1->ch = data;
        first = top1;
    }

push_back函数和display函数中都有错误。在跳转到堆栈和链表之前,必须在指针和内存分配方面建立一个强大的基础。我推荐这篇文章:http://cslibrary.stanford.edu/102/PointersAndMemory.pdf
首先,正如remyabel提到的,top1应该是您的新节点,而不是第一个。第一个只是指向堆栈顶部的指针。我希望你已经处理好了。在显示函数中,您从最顶层的元素开始迭代,即第一个元素,这没有意义,因为它指向null,堆栈从下到上构建,反之亦然。您必须维护一个指向堆栈底部的指针。这是一个工作代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
    char ch;
    struct node *next;
};
struct node *first,*top1,*newptr,*stackbottom;
void push_back(char data) { //Pushes data into the stack
    if (first == NULL) {
        first = new node();
        first->next = NULL;
        first->ch = data;
        stackbottom=first;
    }
    else {
        top1 = new node();
        top1->ch = data;    
        first->next = top1;
        first=top1; 
    }
}
void display(){
    //top1 = first;
    struct node *curr;
    curr=stackbottom;
    if (stackbottom == NULL){
        printf("Stack is empty");
        return;
    }
    while (curr != NULL){
        printf("%c ", curr->ch);
        curr = curr->next;
    }
}

main() {
    first = NULL;
    char EXP[100];
    scanf("%s",EXP);
    //system("cls");
    int len = strlen(EXP);
    for(int i=0;i<len;i++)
        push_back(EXP[i]);
    //printf("%c",stackbottom->ch);
        //push_back(EXP[1]);
    display();
    //system("pause");
}

相关内容

  • 没有找到相关文章

最新更新