C 为什么显示从s1开始->;顶部

C 为什么显示从s1开始->;顶部,c,stack,C,Stack,为什么显示功能的开头是s1->top typedef struct node* Nodeptr; typedef char dataitem; typedef struct node{ dataitem data; Nodeptr next; }Node; typedef struct{ int count; Nodeptr top; }Stack_Head; typedef Stack_Head* Stack; Stack createStack() { Stack s1; s

为什么显示功能的开头是
s1->top

typedef struct node* Nodeptr;
typedef char dataitem;

typedef struct node{
dataitem data;
Nodeptr next;
}Node;

typedef struct{
int count;
Nodeptr top;
}Stack_Head;

typedef Stack_Head* Stack;

Stack createStack() {
  Stack s1;
  s1 = (Stack) malloc(sizeof(Stack_Head));
  s1 - > count = 0;
  s1 - > top = NULL;
  return s1;
}

Nodeptr createNode(dataitem item) {
  Nodeptr temp;
  temp = (Nodeptr) malloc(sizeof(Node));
  temp - > data = item;
  temp - > next = NULL;
  return temp;
}

void push(Stack s1, dataitem item) {
  Nodeptr temp = createNode(item);
  temp - > next = s1 - > top;
  s1 - > top = temp;
  s1 - > count++;
}

void display(Stack s1) {
  Nodeptr ptr = s1 - > top;
  while (ptr != NULL) {
    printf("%d", ptr - > data);
    ptr = ptr - > next;
  }
  printf("\n");
}

void pop(Stack s1) {
    Nodeptr temp;
    if (isEmpty(s1))
      printf("List is Empty");
    else {
      temp = s1 - > top;
      s1 - > top = temp - > next;
      temp - > next = NULL;
      free(temp);
      s1 - > count;
    }

    int isEmpty(Stack s1) {
      return s1 - > top == NULL;
    } 

display
仅显示(打印)堆栈。实现者可以选择从顶部开始显示它。堆栈通常从顶部开始工作,后进先出


请注意,如果
s1
为空,则访问
Nodeptr ptr=s1->top无效,可能导致分段错误。

因为
显示功能将显示堆栈中的所有元素,并且它必须从顶部开始,因为它是唯一可用的元素

ptr
是一个循环变量。它从堆栈的顶部开始,在每次迭代中,它被移动到下一个元素,直到到达堆栈的底部,即具有空下一个指针的节点

编辑

为什么从顶部而不是底部开始?主要是因为它容易得多。您可以访问堆栈顶部,每个节点都可以访问它下面的节点,但不能访问它上面的节点

如果你想从下往上打印,那就难多了。你如何从最下面的项目到上面的项目?除非你还记得它的前身,否则你就不能


从底部开始的最简单方法是首先反转堆栈,即从顶部迭代堆栈,然后在运行过程中创建新堆栈,但这仍然比简单地说“我们将从顶部打印”要困难得多。

认真地说,如果你不能尽最少的努力使问题可读,为什么有人要费心给你一个答案,那也是免费的?我投票把这个问题作为离题题来结束,因为这表明我没有努力使它成为一个正确的问题。答案是“初始化
ptr
”,但从阅读代码中应该可以看出这一点。@SouravGhosh这不是简历的原因。这就是否决投票的原因。s1->top是最后添加的元素,对吗?为什么它开始显示在顶部,而其他人是第一个呢?如果我按8,9和10,它应该显示为8 9 10,这里。。10是s1->右上角吗?那么为什么ptr在10中?@patricksguerra但是当你把它们从堆栈中弹出时,它们会以10、9、8的顺序出现。那么谁来说正确的顺序是什么呢?如果我显示8,9,它应该首先显示8,对吗?在代码上,它是从后面开始的吗?它首先指向9,如果它从末尾开始,我如何遍历它?它是一个。您可以按物品的放置顺序或取下顺序显示物品。没关系。在这种情况下,它们将按照它们将要完成的顺序显示,因为这样做比用其他方式更容易。