有关堆栈如何在C中工作的说明

shi*_*juo 3 c stack data-structures

我只是想在将数据推送到堆栈时对链接过程进行简单的解释.我知道如何使用我书中的代码,但是当我将堆栈头链接从一个链接移动到另一个时,我不确定我是否理解该过程的工作原理.

对于像这样的堆栈:

typedef struct node
{
    void dataptr;
    struct node* link;
}STRUCT_NODE;

typedef struct
{
    int count;
    STACK_NODE* top;
}STACK;
Run Code Online (Sandbox Code Playgroud)

如何更改链接以指向堆栈上推送的新数据.我也不知道

Ale*_*lli 7

堆栈可以通过各种方式实现,但是按照你的问题的方式我假设你的堆栈只是一个链表,类似于

head
?
A ? B ? C ? D ? 0
Run Code Online (Sandbox Code Playgroud)

"当您将堆栈头链接从一个移动到下一个"时,图片只会变为:

    head
    ?
A ? B ? C ? D ? 0
Run Code Online (Sandbox Code Playgroud)

当然A在这个图中不再可以访问,所以你最好在某个地方有另一个指向它的指针(只是为了处理它),但这是如何弹出堆栈的要点(通过制作head = head->next每个节点)在堆栈是一个struct node与一个next场,这是一个struct node*,当然head是一个struct node*以及).

这是为了从堆栈中弹出一些东西(你应该释放A在这种情况下使用的内存).在详细步骤中,它将是:

1 /保存旧头.

      head
      ?
old ? A ? B ? C ? D ? 0
Run Code Online (Sandbox Code Playgroud)

2 /调整头部.

          head
          ?
old ? A ? B ? C ? D ? 0
Run Code Online (Sandbox Code Playgroud)

3 /返回旧头(指向old).

相反,如果您正在谈论将某些东西入堆栈,那么这是一个涉及以下操作的操作:

1 /创建一个新元素.

    head
    ?
Z   A ? B ? C ? D ? 0
Run Code Online (Sandbox Code Playgroud)

2 /指向当前的头部

    head
    ?
Z ? A ? B ? C ? D ? 0
Run Code Online (Sandbox Code Playgroud)

3 /调整头部指向它.

head
?
Z ? A ? B ? C ? D ? 0
Run Code Online (Sandbox Code Playgroud)