使用数组实现顺序栈和循环队列,使用链表实现链栈和链队列,实现入栈/入队、出栈/出队、获取栈顶/队首元素等操作,并进行测试和分析的代码
时间: 2024-11-10 15:13:50 浏览: 25
在计算机科学中,我们可以使用不同的数据结构如数组和链表来实现基础的数据结构,例如栈和队列。以下是使用数组和链表分别实现这两种数据结构的简单示例:
**1. 数组实现:**
```python
class ArrayStack:
def __init__(self, capacity):
self.capacity = capacity
self.stack = [None] * capacity
# 入栈
def push(self, item):
if len(self.stack) == self.capacity:
raise Exception("Stack is full")
self.stack[len(self.stack) - 1] = item
# 出栈
def pop(self):
if not self.is_empty():
return self.stack.pop()
else:
raise Exception("Stack is empty")
# 获取栈顶元素
def top(self):
if not self.is_empty():
return self.stack[-1]
else:
raise Exception("Stack is empty")
# 判断是否为空
def is_empty(self):
return len(self.stack) == 0
# 循环队列
classCircularQueue:
def __init__(self, capacity):
self.capacity = capacity
self.queue = [None] * capacity
self.front = -1
self.rear = -1
# 入队
def enqueue(self, item):
if (self.rear + 1) % self.capacity == self.front:
raise Exception("Queue is full")
if self.rear == -1:
self.front = 0
self.rear = (self.rear + 1) % self.capacity
self.queue[self.rear] = item
# 出队
def dequeue(self):
if self.is_empty():
raise Exception("Queue is empty")
item = self.queue[self.front]
if self.front == self.rear:
self.front = -1
self.rear = -1
else:
self.front = (self.front + 1) % self.capacity
return item
# 获取队首元素
def front_item(self):
if not self.is_empty():
return self.queue[self.front]
else:
raise Exception("Queue is empty")
# 判断是否为空
def is_empty(self):
return self.front == -1 and self.rear == -1
# 测试部分
stack = ArrayStack(5)
queue = CircularQueue(5)
# 对象实例化并进行操作...
```
**2. 链表实现:**
```python
# 这里省略了链表的具体实现,因为它们更复杂,涉及节点创建和指针管理
class ListNode:
...
class LinkedListStack:
def __init__(self):
self.head = None
# ... 实现入栈、出栈、获取栈顶等操作 ...
class LinkedListQueue:
def __init__(self):
self.head = None
self.tail = None
# ... 实现入队、出队、获取队首等操作 ...
# 测试部分
linked_stack = LinkedListStack()
linked_queue = LinkedListQueue()
# 对象实例化并进行操作...
```
测试这部分应该包括插入元素、删除元素、查看顶部/队首元素以及处理异常等情况,确保所有操作都能正常工作。
**相关问题--:**
1. 在这两种实现中,哪一种更适合大数据量的情况?
2. 如何优化数组实现的栈/队列以降低内存消耗?
3. 链表实现相比数组实现有哪些优势和不足?
阅读全文