有人可以帮我理解以下功能中发生的事情吗?

时间:2017-04-04 11:52:04

标签: c linked-list stack

有人可以帮我理解以下功能中发生的事情吗? 具体使用s1-> top?什么是s1->顶部的功能push& pop& amp;显示?因为如果在函数push中,只要按下数字,s1-> top就会向右移动?那么为什么在显示功能中,它说s1-> top在遍历中是第一个,而在push s1-> top是n右边,而在打印值时,我们需要先在左边然后遍历..why?

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 (ptr1 = 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;
    }  

2 个答案:

答案 0 :(得分:1)

此堆栈结构为LIFOs1->top是堆栈的顶部,即最后一个推送元素。每个元素都指向堆栈中的下一个元素。

例如,在这里,push函数创建一个指向数据的新元素,使这个新元素指向最后插入的元素(它是堆栈中的下一个元素),并放置新元素在堆栈的顶部(s1->top = new_node,此处的新节点称为temp)。

答案 1 :(得分:0)

这是stack数据结构的实现。

想想很多书都放在另一个之上。
这将是一堆书籍。

继续书堆类比:
我们从没有任何内容的研究表开始。 我们可以将此状态称为“没有堆栈” 然后我们在一张白纸上写下“Book Stack”并将它放在桌子上。 我们可以将此状态称为“堆栈为空” 让我们把一本数学书放在堆栈上。 现在堆栈有一个项目,即数学书籍,它位于堆栈顶部。 我们'放'另一本书,地理位置在堆栈上。 现在,我们在堆栈上有两本书,Geogrphy书是最重要的。 接下来,我们从堆栈中“删除”地理图书。数学书籍将再次登上榜首。

确定。 该表是您的计算机。 书上写有书堆的纸是一堆。 书籍是可以放在堆栈上的元素。 'Put'被称为'推' '删除'被称为'流行'