Понимание этой операции выталкивания стека - PullRequest
0 голосов
/ 26 мая 2019

enter image description here Является ли мое понимание работы операции 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...