2017-04-04 53 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」

相關問題