栈与循环队列

栈与循环队列

1.栈(Stack)是一种具有后进先出(LIFO)特性的线性数据结构。在栈中,元素的插入和删除操作只能在栈的一端进行,通常称为栈顶。栈不支持在任意位置的元素访问,只能访问栈顶的元素。栈的常见操作包括入栈(push)将元素放入栈顶、出栈(pop)将栈顶元素移除,以及获取栈顶元素(peek)等。

下面是一个使用Python列表实现栈的示例代码:

class Stack:

def __init__(self):

self.stack = []

def push(self, item):

self.stack.append(item)

def pop(self):

if self.is_empty():

return None

return self.stack.pop()

def peek(self):

if self.is_empty():

return None

return self.stack[-1]

def is_empty(self):

return len(self.stack) == 0

在上述代码中,我们定义了一个Stack类,使用Python列表作为内部存储结构。push方法将元素添加到栈顶,pop方法将栈顶元素移除并返回它,peek方法返回栈顶元素而不移除它,is_empty方法用于判断栈是否为空。 以下是对栈的一些操作示例:

stack = Stack()

stack.push(10) # 入栈: 10

stack.push(20) # 入栈: 20

print(stack.peek()) # 获取栈顶元素: 20

stack.pop() # 出栈: 20

print(stack.peek()) # 获取栈顶元素: 10

2.循环队列(Circular Queue)是一种通过循环方式实现的队列。与普通队列不同的是,在循环队列中,当队列满时,新的元素可以覆盖队列的起始位置。这种设计在一定程度上提高了存储空间的利用率。循环队列有两个关键指针,一个指向队列的起始位置(front),一个指向队列的末尾位置的下一个位置(rear)。常见操作包括入队(enqueue)将元素添加到队列末尾,出队(dequeue)将队列起始位置的元素移除,并且可以判断队列是否为空或已满。

下面是一个使用Python列表实现循环队列的示例代码:

class CircularQueue:

def __init__(self, k):

self.queue = [None] * k

self.front = 0

self.rear = 0

self.size = 0

self.capacity = k

def enqueue(self, item):

if self.is_full():

return False

self.queue[self.rear] = item

self.rear = (self.rear + 1) % self.capacity

self.size += 1

return True

def dequeue(self):

if self.is_empty():

return None

item = self.queue[self.front]

self.queue[self.front] = None

self.front = (self.front + 1) % self.capacity

self.size -= 1

return item

def is_empty(self):

return self.size == 0

def is_full(self):

return self.size == self.capacity

在上述代码中,我们定义了一个CircularQueue类,使用Python列表作为循环队列的内部存储结构。enqueue方法将元素添加到队列末尾,dequeue方法将队列起始位置的元素移除并返回它,is_empty方法用于判断队列是否为空,is_full方法判断队列是否已满。 以下是对循环队列的一些操作示例:

queue = CircularQueue(3)

queue.enqueue(10) # 入队: 10

queue.enqueue(20) # 入队: 20

queue.enqueue(30) # 入队: 30

print(queue.dequeue()) # 出队: 10

print(queue.dequeue()) # 出队: 20

queue.enqueue(40) # 入队: 40

print(queue.dequeue()) # 出队: 30

print(queue.is_empty()) # 判断队列是否为空: True

以上是栈和循环队列的简单介绍和示例代码。它们都是常见的数据结构,用于解决各种问题。

相关推荐

摄影最难过的一关——取景到底是怎么回事
谁有365比分链接

摄影最难过的一关——取景到底是怎么回事

📅 06-29 👁️ 860
国产游戏有哪些 十大必玩国产游戏精选
365bet备用官网

国产游戏有哪些 十大必玩国产游戏精选

📅 08-01 👁️ 186
详细步骤教你如何下载京东APP并注册账户
beat365官网备用

详细步骤教你如何下载京东APP并注册账户

📅 08-12 👁️ 8498
现在多少级封顶
365bet备用官网

现在多少级封顶

📅 08-06 👁️ 2154
易宝软件为什么这么好进
beat365官网备用

易宝软件为什么这么好进

📅 07-28 👁️ 9254
《枪战英雄》停服公告
谁有365比分链接

《枪战英雄》停服公告

📅 08-02 👁️ 5724