编写程序,完成栈和队列的基本操作。要求使用链栈与顺序队列实现,数据域自定,但不能少于两项属性。并能够演示各项功能
时间: 2024-11-06 07:19:29 浏览: 13
栈和队列笔记包括栈和队列的定义、顺序栈出入栈、链栈的出入栈操作、顺序队列基本操作、链式队列基本操作等
编写程序实现栈(Stack)和队列(Queue)通常涉及创建两个数据结构:一个使用链表实现的链栈(Linked Stack),另一个使用数组实现的顺序队列(Sequential Queue)。下面是一个简单的Python示例,展示了如何实现这两个数据结构以及它们的基本操作:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
# 链栈 LinkedStack
class LinkedStack:
def __init__(self):
self.top = None
# 插入元素
def push(self, item):
new_node = Node(item)
if not self.top:
self.top = new_node
else:
new_node.next = self.top
self.top = new_node
# 删除元素
def pop(self):
if not self.is_empty():
popped_item = self.top.data
self.top = self.top.next
return popped_item
else:
raise IndexError("Stack is empty")
# 检查是否为空
def is_empty(self):
return self.top is None
# 顺序队列 SequentialQueue (先进先出FIFO)
class SequentialQueue:
def __init__(self, capacity=5):
self.front = 0
self.rear = -1
self.queue = [None] * capacity
# 入队
def enqueue(self, item):
if self.is_full():
print("Queue is full")
return
self.rear += 1
if self.rear == len(self.queue) - 1:
self.rear = 0
self.queue[self.rear] = item
# 出队
def dequeue(self):
if self.is_empty():
print("Queue is empty")
return
removed_item = self.queue[self.front]
self.queue[self.front] = None
self.front = (self.front + 1) % len(self.queue)
return removed_item
# 判断队列是否满
def is_full(self):
return self.rear == self.front + 1
# 判断队列是否空
def is_empty(self):
return self.front == self.rear
# 示例演示
stack = LinkedStack()
queue = SequentialQueue()
# 堆栈操作
stack.push(1)
stack.push(2)
print(stack.pop()) # 输出: 2
print(stack.is_empty()) # 输出: False
# 队列操作
queue.enqueue(3)
queue.enqueue(4)
print(queue.dequeue()) # 输出: 3
print(queue.is_empty())
阅读全文