Python資料結構——棧、隊列的實現(二)

來源:互聯網
上載者:User
1. 一個列表實現兩個棧

class Twostacks(object):    def __init__(self):        self.stack=[]        self.a_size=0        self.b_size=0        self.top=0    def a_isEmpty(self):        return self.a_size==0    def a_push(self,item):        self.stack.insert(self.a_size,item)        self.a_size+=1            def a_pop(self):        if self.a_size>=1:            item=self.stack[self.a_size-1]            self.stack.remove(item)            self.a_size-=1            return item    def b_isEmpty(self):        return self.b_size==0    def b_push(self,item):        self.stack.insert(self.a_size,item)        self.b_size+=1    def b_pop(self):        if self.b_size>=1:            item=self.stack[self.a_size]            self.stack.remove(item)            self.b_size-=1            return item

2. 兩個棧實現一個隊列

有兩個棧s1,s2。入隊時,將元素壓入s1。出隊時,判斷s2是否為空白,如不為空白,則直接彈出頂元素;如為空白,則將s1的元素逐個“倒入”s2,把最後一個元素彈出並出隊。

class Stack(object):    def __init__(self):        self.stack=[]    def isEmpty(self):        return self.stack==[]    def push(self,item):        self.stack.append(item)    def pop(self):        if self.isEmpty():            raise IndexError,'pop from empty stack'        return self.stack.pop()    def size(self):        return len(self.stack)class Queue_with_stacks(object):    def __init__(self):        self.stackA=Stack()        self.stackB=Stack()    def isEmpty(self):        return self.stackA.isEmpty() and self.stackB.isEmpty()    def enqueue(self,item):        self.stackA.push(item)    def dequeue(self):        if self.stackB.isEmpty():            if self.stackA.isEmpty():                raise IndexError,'queue is empty.'            while self.stackA.size()>=2:                self.stackB.push(self.stackA.pop())                        return self.stackA.pop()        else:            return self.stackB.pop()

3. 兩個隊列實現一個棧

class Queue(object):    def __init__(self):        self.queue=[]    def isEmpty(self):        return self.queue==[]    def enqueue(self,x):        self.queue.append(x)    def dequeue(self):        if self.queue:            a=self.queue[0]            self.queue.remove(a)            return a        else:            raise IndexError,'queue is empty'    def size(self):        return len(self.queue)class Stack_with_queues(object):    def __init__(self):        self.queueA=Queue()        self.queueB=Queue()    def isEmpty(self):        return self.queueA.isEmpty() and self.queueB.isEmpty()    def push(self,item):        if self.queueB.isEmpty():            self.queueA.enqueue(item)        else:            self.queueB.enqueue(item)    def pop(self):        if self.isEmpty():            raise IndexError,'stack is empty'        elif self.queueB.isEmpty():            while not self.queueA.isEmpty():                cur=self.queueA.dequeue()                if self.queueA.isEmpty():                    return cur                self.queueB.enqueue(cur)        else:                        while not self.queueB.isEmpty():                cur=self.queueB.dequeue()                if self.queueB.isEmpty():                    return cur                self.queueA.enqueue(cur)

以上就是Python資料結構——棧、隊列的實現(二)的內容,更多相關文章請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.