算法学习日记 day04

本文介绍了数据结构中的队列、堆栈和链表的基本概念及其在Python中的简单实现。队列遵循先进先出(FIFO)原则,堆栈则后进先出(FILO)。示例代码展示了如何在Python中创建和操作这些数据结构。链表作为动态数据结构,通过指针连接节点,文章提供了链表的定义及添加、打印和获取链表长度的方法。
摘要由CSDN通过智能技术生成

队列:从一端插入数据,另一端删除数据元素,插入的一端叫前端(front)移除的叫后端(rear),也叫作先进先出FIFO(first in first out)

在Python中的简单使用:

值得注意的是在python中使用get()取出数据后会进行删除

import queue        #导入queue包
str='我是天才'
FIFO=queue.Queue()          #Queue()提供队列对象和方法
i=0
while i<=len(str)-1:
    FIFO.put(str[i])        #使用put()将字符串依次放入队列
    i+=1
while not FIFO.empty():		#输出,使用empty()检测是否为空
    print(FIFO.get())		#使用get()获取元素

堆栈:也是从一端插入数据,但也从同一端取出并删除,插入时叫做进栈(Push)取出并删除时叫做出栈(Pop),栈数据进出叫做FILO(first in last out)

在Python中的简单使用:

stack=[]
for s in range(1,7):
	stack.append(s)
print('after push:',stack)
i=1
while stack:
	print('element %d is %d out'%(stack.pop(),i))

链表:是一种在内存里非连续、动态分配存储位置,数据元素之间是通过指针进行数据连接,链表主要由一系列结点(Node)组成,每个节点至少包含数据域(Data)和指针域(Next)两部分,数据与用于存储数据元素,指针与用于存储指向下一个节点的地址。单向链表最左端第一个结点为链表头(head)右边最后一个结点叫做链表尾(tail)。

在Python中的简单(其实一点也不简单,不推荐使用python编写链表)使用:

class Node():  # 定义节点类
    def __init__(self, data=None, next=None):  # 初始化类
        self._data = data
        self._next = next

    def setData(self, NewData):  # 设置节点的数值
        self._data = NewData

    def setNext(self, NewNext):  # 设置节点的下一个地址
        self._next = NewNext

    def getData(self):  # 得到节点的数值
        return self._data

    def getNext(self):  # 得到节点的下一个地址
        return self._next


class LinkedList():  # 建立链表类
    def __init__(self):  # 初始化类
        self._head = Node()  # 链表头
        self._length = 0  # 链表长度

    def tail_add(self, NewData):  # 在链表尾部增加节点
        NewNode = Node(NewData, None)  # 新增一个节点
        if self._length == 0:  # 空链表
            self._head = NewNode  # 把新增节点对象赋值给head
            self._length = 1  # 链表长度变1
        else:
            current = self._head
            while current.getNext() != None:  # 判断下一个地址是否None
                current = current.getNext()  # 根据地址next遍历链表
            current.setNext(NewNode)  # 找到链尾,增加新节点
            self._length += 1  # 链表数量加一

    def PrintLinkedList(self):  # 遍历并打印节点数值
        curr = self._head
        while curr != None:  # 判断下一个地址是否None
            print('打印节点:%s' % (curr.getData()))
            curr = curr.getNext()

    def getLength(self):
        return self._length


# ==================================调用链表类实例,并打印结果
foods = ['apple', 'water', 'juice', 'tomato']
newLinked = LinkedList()  # 建立链表实例
for s in foods:
    newLinked.tail_add(s)  # 增加节点,并给每个节点赋值
print(newLinked.getLength())  # 打印链表节点数
newLinked.PrintLinkedList()  # 打印所有的节点的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值