มีโครงสร้างข้อมูลที่มีขนาดคงที่และจะผลักองค์ประกอบที่เก่าที่สุด / สุดท้ายออกหากใส่องค์ประกอบใหม่หรือไม่


20

ฉันกำลังมองหาโครงสร้างข้อมูลที่จะผลักองค์ประกอบที่เก่าที่สุด / สุดท้ายออกหากมีการแทรกองค์ประกอบใหม่ ตัวอย่างเช่นให้Dเป็นตัวแทนของโครงสร้าง Dมี 3 องค์ประกอบของประเภทNumber Dของค่าเริ่มต้นจะเริ่มต้นได้และ1, 23

D=[1,2,3]

หากผู้Numberที่มีค่าที่5ถูกแทรกลงD, 3จะถูกผลักออกไปในขณะที่1และ2จะถูกเลื่อนขวา

D=[5,1,2]

สิ่งแรกที่อยู่ในใจคืออาร์เรย์ แต่คำจำกัดความไม่รวมถึงพฤติกรรมการผลัก


ไม่มีโครงสร้างข้อมูลในตัว แต่มันง่ายที่จะใช้งานโดยใช้ลิสต์ที่เชื่อมโยงรายการทวีคูณเชื่อมโยงรายการใช่มั้ย
ไม่พบผู้ใช้

1
สิ่งที่เกี่ยวกับการใช้เสื้อคลุมรับมรดกจากคิว? void push_replace(T val) { pop(); push(val); }จากนั้นคุณเพิ่มวิธีการ
Francesco Dondi

@ FrancescoDondi น่าจะเป็นT push_replace(T val) { T old = pop(); push(val); return old; }
valbaca

1
ตอนนี้มีแน่นอน: คุณเพิ่งกำหนดอย่างไม่เป็นทางการ; บางทีคุณควรถามว่าเป็นที่รู้จักกันดีหรือไม่มีส่วนต่อประสานที่ตกลงกันโดยทั่วไปและมีการติดตั้งใช้งานไหม (ไม่ใช่ว่าสุดท้ายเป็นปัญหาใหญ่)
PJTraill

@valbaca ฉันคิดว่า C ++ pop()จะไม่ส่งคืนอะไรเลยเนื่องจากปัญหากับการคลี่คลายคลี่คลายในกรณีที่มีข้อยกเว้นในการคัดลอกวัตถุที่ซับซ้อนดังนั้นคุณควรจะใช้front()ก่อนถ้าคุณต้องการมันก่อนทิ้ง แต่แน่นอนถ้าคุณไม่สนใจข้อยกเว้นในแบบของคุณจะดีกว่า
Francesco Dondi

คำตอบ:


44

คิวขนาดคงที่มักจะดำเนินการโดยใช้สิ่งที่บางคนเรียกบัฟเฟอร์วงกลม หากคุณลบการป้องกันที่เต็มแล้วคุณจะได้รับพฤติกรรมที่ต้องการ

แน่นอนว่าจะไม่มีการผลักดันที่เกิดขึ้นจริงในอาเรย์ - ซึ่งมันแพงเกินไป - แต่มันจะดูเหมือนกับมันจากด้านนอก


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
กราฟิลส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.