我是否了解此堆栈的push操作的工作。请查看我的解释,以便我了解所理解的是正确的还是错误的。我正在为此程序编写博客。
首先有一个类型为node的结构声明,其数据类型为整数,并且具有结点链接的指针。
代码
struct Node{
int data;
struct Node *link;
}*top=NULL;
struct Node *top=NULL
表示有一个指针变量top.A指针
变量可以存储一个内存位置。此指针变量的内存位置为0x500,其值为NULL。这意味着* top指向NULL位置。
void push(){
struct Node *tmp;
tmp=(struct Node *)malloc(sizeof(struct Node *));
tmp->data=i;
i++;
tmp->link=top;
top=tmp;
}
用于推送功能 我声明了一个指针mpt,类型为struct Node。假设tmp以0xDDD的形式存储在地址中,如图所示。然后,指针变量* tmp包含了地址0xDDD。现在,我们为对象tmp的数据字段分配一个值。
tmp-> link = top行表示存储在地址0x500的NULL 将存储在其中。现在,当我们执行top = tmp时,地址0xDDD将存储到0x500。此过程继续。
此图是否正确解释了堆栈中的推入操作。
#include<stdio.h>
#include<malloc.h>
struct Node{
int data;
struct Node *link;
}*top=NULL;
void push();
void pop();
void display();
int main(){
int choice;
while(1){
scanf("%d",&choice);
switch(choice){
case 1: push();
break;
case 2:pop();
break;
case 3:display();
break;
default:
printf("Wrong choice");
}
}
return 0;
}
int i=0;
void push(){
struct Node *tmp;
tmp=(struct Node *)malloc(sizeof(struct Node *));
tmp->data=i;
i++;
tmp->link=top;
top=tmp;
}
void pop(){
struct Node *tmp;
tmp=top;
top=top->link;
free(tmp);
}
void display(){
struct Node *ptr;
ptr=top;
while(ptr!=NULL){
printf("%d",ptr->data);
ptr=ptr->link;
}