了解此堆栈推入操作

时间:2019-05-26 11:58:34

标签: c pointers stack

enter image description here我是否了解此堆栈的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;
}

0 个答案:

没有答案