手撕数据结构:栈和队列的概念以及实现

在计算机科学中,数据结构是组织和存储数据的方式。栈和队列是最基本的两种数据结构,了解它们的概念及其实现对学习算法和解决问题至关重要。

一、栈(Stack)

1. 概念

栈是一种后进先出(LIFO, Last In First Out)的数据结构。也就是说,最后入栈的元素最先出栈。我们可以将其比作书本的堆叠,最后放上去的书本是最先可以拿到的。

栈主要有两个基本操作: - 推入(Push):将一个元素放入栈顶。 - 弹出(Pop):移除并返回栈顶的元素。

2. 实现

栈可以使用数组或链表来实现。以下是用 Python 实现的栈的基本代码示例:

class Stack:
    def __init__(self):
        self.items = []

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

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if self.is_empty():
            raise IndexError("Pop from an empty stack")
        return self.items.pop()

    def peek(self):
        if self.is_empty():
            raise IndexError("Peek from an empty stack")
        return self.items[-1]

    def size(self):
        return len(self.items)

# 使用示例
if __name__ == "__main__":
    stack = Stack()
    stack.push(1)
    stack.push(2)
    print(stack.pop())  # 输出 2
    print(stack.peek())  # 输出 1

二、队列(Queue)

1. 概念

队列是一种先进先出(FIFO, First In First Out)的数据结构。即最早入队的元素最先出队。可以将队列比作排队买票,最先到达的顾客最先被服务。

队列也有两个基本操作: - 入队(Enqueue):将一个元素添加到队列的末尾。 - 出队(Dequeue):移除并返回队列的头部元素。

2. 实现

队列同样可以使用数组或链表来实现。以下是用 Python 实现的队列的基本代码示例:

class Queue:
    def __init__(self):
        self.items = []

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

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        if self.is_empty():
            raise IndexError("Dequeue from an empty queue")
        return self.items.pop(0)

    def size(self):
        return len(self.items)

# 使用示例
if __name__ == "__main__":
    queue = Queue()
    queue.enqueue(1)
    queue.enqueue(2)
    print(queue.dequeue())  # 输出 1
    print(queue.size())      # 输出 1

三、总结

栈和队列作为基础数据结构,具有广泛的应用场景。在算法和程序设计中,栈可以用于解决递归问题、表达式求值等,而队列常被用于广度优先搜索、任务调度等场景。通过对它们的理解和具体实现,我们能够更好地掌握数据结构的基本操作,从而为后续学习复杂数据结构和算法打下良好的基础。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部