c++教程 棧和隊列的主要區(qū)?
棧和隊列的主要區(qū)?Stack是一個線性表,只能在表的一端插入和刪除。隊列是一個線性表,只能在表的一端插入,在另一端刪除。堆棧和隊列是存儲在特定存儲單元范圍內(nèi)的數(shù)據(jù),可以檢索這些數(shù)據(jù)以供使用。不同的是,
棧和隊列的主要區(qū)?
Stack是一個線性表,只能在表的一端插入和刪除。
隊列是一個線性表,只能在表的一端插入,在另一端刪除。堆棧和隊列是存儲在特定存儲單元范圍內(nèi)的數(shù)據(jù),可以檢索這些數(shù)據(jù)以供使用。不同的是,棧就像一個很窄的桶,先存儲的數(shù)據(jù)最后只能取出,隊列不同,即“先入后出”。排隊有點像人們排隊買東西的“排隊”。排在第一排的人先買,排在第二排的人后買,即“先進先出”。有時,在數(shù)據(jù)結(jié)構(gòu)中,可能存在根據(jù)大小或特定條件排隊的數(shù)據(jù)隊列。此時,隊列屬于特殊隊列,不需要按照“先進先出”的原則讀取數(shù)據(jù)。
棧和隊列的存儲方式?
4. 實現(xiàn)思想
(1)使用了兩個棧a和B,其中a負(fù)責(zé)push操作,B負(fù)責(zé)pop操作。使用變量backElement存儲最后添加的元素。
(2)執(zhí)行隊列的推送操作。每次添加時,都會相應(yīng)地將元素添加到堆棧中。并返回元素賦值
](3)執(zhí)行隊列的pop操作,每次刪除,因為棧B負(fù)責(zé)pop操作,首先確定棧B是否為空?
a.如果B為空,判斷a是否為空?
如果a也為空,則輸出錯誤消息,并且隊列為空。
如果a不為空,堆棧a中的所有數(shù)據(jù)都存儲在堆棧B中。執(zhí)行B.push(a.top()),a.pop()。然后對堆棧B執(zhí)行B.pop()操作,刪除隊列的頭元素
B.如果B不是空的,直接對B執(zhí)行B.pop()操作
例如,對a,B,C執(zhí)行push操作,然后執(zhí)行pop操作
(4)執(zhí)行隊列的front()操作。該方法與pop操作相同,只是在最后一步中使用b.top()返回值。
(5)實現(xiàn)隊列的back()操作,因為我們使用變量back Elem保存最后的輸入數(shù)據(jù),所以它直接返回。
(6)要實現(xiàn)隊列的size()和empty()操作,分別對a和B執(zhí)行操作。