gpt4 book ai didi

c - 我在 C 中创建了一个 push 和 pop 函数,但不知道如何按顺序打印它们

转载 作者:行者123 更新时间:2023-12-02 16:22:50 25 4
gpt4 key购买 nike

我最近研究了链表并尝试创建一个推送和弹出功能。

我已经成功创建了一个看起来像这样的。

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

struct node{
int data;
struct node *next;
};

struct node* buffer = NULL;

void push(int elem){
struct node *new_element = (struct node*)malloc(sizeof(struct node));
new_element->next = buffer;
new_element->data = elem;
buffer = new_element;
}

int pop(void){
int elem = buffer->data;
struct node *eliminate = buffer;
buffer = eliminate->next;
free(eliminate);
return elem;
}

后来我尝试用这种方式打印它们:

int main(void) {
push(5);
push(7);
push(8);
pop();
printf("%d %d", buffer->data, buffer->next->data);
}

但是,结果是 7 5 而不是 5 7。我的推送功能有问题吗?

最佳答案

之后:

push(5);
push(7);
push(8);

您有以下链表:

5 <- 7 <- 8 <- 缓冲区

弹出后你有:5 <- 7 <- buffer

这就是为什么 buffer->data 为 7 而 buffer->next->data 为 5 的原因。

为了以正确的顺序打印列表,您需要一个指向第一个节点的指针。在你的情况下是 5。同样,你的方法应该使它成为一个双链表。

struct node{
int data;
struct node *next;
};

struct node* start = NULL;
struct node* buffer = NULL;

void push(int elem){
struct node *new_element = (struct node*)malloc(sizeof(struct node));
new_element->next = buffer;
new_element->data = elem;
if (buffer == NULL) start = new_element; // this is the magic
buffer = new_element;
}

关于c - 我在 C 中创建了一个 push 和 pop 函数,但不知道如何按顺序打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65185356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com