Является ли мое понимание работы операции push этого стека. Пожалуйста, просмотрите мое объяснение, чтобы я мог знать, что я понял, правильно или нет. Я делаю это для написания блога по этой программе.
Сначала идет объявление структуры типа узла с целочисленным типом данных и указателем ссылки на узел структуры.
код
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;
}
Для функции толчка
я объявляю указатель tmp типа struct Node. Предположим, что tmp хранится по адресу 0xDDD, как показано на рисунке. Затем переменная-указатель * tmp содержит адрес 0xDDD. Теперь мы присваиваем значение полю данных объекта tmp.
Строка tmp-> link = top означает, что NULL хранится по адресу 0x500
будет храниться в нем. Теперь, когда мы выполняем 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;
}