2017-04-04 52 views
1

有人可以帮助我了解在下列功能中发生了什么? 具体使用s1-> top?而s1-> top在功能上的动作是什么,按& pop &显示?因为如果在功能推动中,每当一个数字被推动时,s1-> top向右移动?那么为什么在显示功能中,它表示s1-> top在遍历中是第一个,而在s1-> top中是n在右边,而在打印值时,我们需要先在左边然后遍历。为什么?有人可以帮助我了解在下列功能中发生了什么?

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; 
    } 
+1

你想看看'Stack'类型的定义。 – alk

+1

由于可怕的缩进,我没有阅读代码。 –

+0

你的意思是' - >'运算符吗?你不知道它是什么?也许你应该阅读[点(。)运算符和 - >在C++中有什么区别?](http://stackoverflow.com/questions/1238613/what-is-the-difference-between-the-dot- operator-and-in-c)(如果这是主要问题,可能应该将其投票重复)。 –

回答

1

该堆栈结构是LIFOs1->top是堆栈的顶部,即上次推元件。每个元素指向堆栈中的下一个元素。

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

+0

如果s1-> top是最后一个推送元素..那么为什么功能显示开始打印在s1-> top,如果s1-> >顶部是最后推送的元素?以及如果我们显示,我们需要printf从第一个插入元素 –

+0

如果s1-> top是最新插入的元素,那么为什么在显示中,s1-> top是第一遍?有点奇怪。而正确的打印是你需要首先插入..不是最后一次插入,你称为S1 - >顶部 –

+0

对不起,我看到通知,但忘了回答。那么,代码确实开始显示最后插入的元素。为了显示从第一个插入元素到下一个元素,要么使用递归性,要么在递归调用后显示当前元素,要么创建一个双链表 - 如果你这样做了,你可以保留一个'stack- >'开始'在你的'堆栈'指针,所以你不必在每个显示器上查找第一个元素。 – Cakeisalie5

0

这是一个stack数据结构的实现。

想想很多已经放在另一个之上的书。
这将是一摞书。

书籍类比的堆栈继续:
我们先从什么也没有在其上的学习桌。 我们可以把这个状态称为“没有堆栈” 然后我们在一张白纸上写上“书架”并将它放在桌子上。 我们可以将这个状态称为“堆栈为空” 让“放入”一堆数学书籍。 现在栈上有一个项目,数学书,它位于栈顶。 我们将另一本书“地理”放在堆栈上。 现在,我们有两本关于堆栈的书,Geogrphy书是最上面的书。接下来,我们从堆栈中删除地理书籍。数学书再次位居榜首。

好的。 桌子是你的电脑。带有书堆的纸张是堆叠的。 书是可以放置在堆栈上的元素。 “把”被称为“推” “删除”被称为“POP”

相关问题