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)
如何更改链接以指向堆栈上推送的新数据.我也不知道
堆栈可以通过各种方式实现,但是按照你的问题的方式我假设你的堆栈只是一个链表,类似于
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)