Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Python - MUST use doubly linked list class (code for it is below).: Question 1: Define a LinkedQueue class that implements the Queue ADT. Implementation

Python - MUST use doubly linked list class (code for it is below).:

Question 1: Define a LinkedQueue class that implements the Queue ADT.

Implementation Requirement: All queue operations should run in O(1) worstcase.

Hint: You would want to use a doubly linked list as a data member.

Doubly linked list class:

class DoublyLinkedList: class Node: def __init__(self, data=None, prev=None, next=None): self.data = data self.prev = prev self.next = next

def disconnect(self): self.data = None self.prev = None self.next = None

def __init__(self): self.header = DoublyLinkedList.Node() self.trailer = DoublyLinkedList.Node() self.header.next = self.trailer self.trailer.prev = self.header self.size = 0

def __len__(self): return self.size

def is_empty(self): return len(self) == 0

def first_node(self): if(self.is_empty()): raise Exception("List is empty") return self.header.next

def last_node(self): if(self.is_empty()): raise Exception("List is empty") return self.trailer.prev

def add_after(self, node, data): prev = node succ = node.next new_node = DoublyLinkedList.Node(data, prev, succ) prev.next = new_node succ.prev = new_node self.size += 1 return new_node

def add_first(self, data): return self.add_after(self.header, data)

def add_last(self, data): return self.add_after(self.trailer.prev, data)

def add_before(self, node, data): return self.add_after(node.prev, data)

def delete_node(self, node): pred = node.prev succ = node.next pred.next = succ succ.prev = pred self.size -= 1 data = node.data node.disconnect() return data

def delete_first(self): if (self.is_empty()): raise Exception("List is empty") return self.delete_node(self.first_node())

def delete_last(self): if (self.is_empty()): raise Exception("List is empty") return self.delete_node(self.last_node())

def __iter__(self): if (self.is_empty()): return cursor = self.first_node() while cursor is not self.trailer: yield cursor.data cursor = cursor.next

def __repr__(self): return "[" + " <--> ".join([str(item) for item in self]) + "]"

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

More Books

Students also viewed these Databases questions

Question

b. Will there be one assigned leader?

Answered: 1 week ago

Question

d. How will lack of trust be handled?

Answered: 1 week ago

Question

b. Does senior management trust the team?

Answered: 1 week ago