网易笔试题2


队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。
1) 设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有 front=16,rear=5(front指向队头,rear指向队尾元素的后一位置),当前循环队列中元素个数为多少?请给出计算过程。
2) 该循环队列为空的条件是什么?队满的条件是什么? 
3) 请用熟悉的程序语言实现循环队列,需要有队列的插入,删除方法以及判断队列是否为空,队列是否已经满方法。

 


 (1)

元素个数=(rear−front+容量)mod容量

元素个数=(5−16+50)mod50 = 39


(2) 

2.队空front  == rear

3.队满(rear+1)%队容量==front


(3)

class CircularQueue:
    def __init__(self, capacity):
        self.capacity = capacity
        self.queue = [None] * capacity
        self.front = self.rear = -1

    def is_empty(self):
        return self.front == -1

    def is_full(self):
        return (self.rear + 1) % self.capacity == self.front

    def enqueue(self, item):
        if self.is_full():
            print("Queue is full. Cannot enqueue.")
            return
        elif self.is_empty():
            self.front = self.rear = 0
        else:
            self.rear = (self.rear + 1) % self.capacity
        self.queue[self.rear] = item
        print(f"Enqueued {item} to the queue.")

    def dequeue(self):
        if self.is_empty():
            print("Queue is empty. Cannot dequeue.")
            return None
        elif self.front == self.rear:
            item = self.queue[self.front]
            self.front = self.rear = -1
        else:
            item = self.queue[self.front]
            self.front = (self.front + 1) % self.capacity
        print(f"Dequeued {item} from the queue.")
        return item


# 示例用法
if __name__ == "__main__":
    queue = CircularQueue(5)

    print("Is queue empty?", queue.is_empty())  # 应该输出 True

    queue.enqueue(1)
    queue.enqueue(2)
    queue.enqueue(3)
    queue.enqueue(4)
    queue.enqueue(5)

    print("Is queue full?", queue.is_full())  # 应该输出 True

    queue.enqueue(6)  # 应该输出 "Queue is full. Cannot enqueue."

    queue.dequeue()
    queue.dequeue()
    queue.dequeue()

    print("Is queue empty?", queue.is_empty())  # 应该输出 False

8352ba5af77f445da70341fde0251bf1.png 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值