《Python数据结构与算法分析》第三章课后习题

本文是《Python数据结构与算法分析》第三章的课后习题解答,作者分享了自己对栈、队列、双端队列和链表的理解,并完成了部分习题,包括节点计数、链表操作和无序列表的实现。代码可在作者的GitHub找到,欢迎交流。

文章目录


前言

最近开始学数据结构,打算用python作为语言,看的书是米勒和戴维的《Python数据结构与算法分析》。目前大三,希望能一个月速成,奥利给!!注意到课本中的练习题没有参考答案,我自己写了一份放到这上面,更详细,完整的代码在我的github:https://github.com/Yunzz-goon/PythonForDataStructure
欢迎大家一起交流!!!
——————————————————————————
第二章讲的是时间复杂度,因为很多地方需要plot,我打算先埋个伏笔,等到自己的matlibplot博客开始了再穿插到那边。Anyway,第三章讲了几种数据结构:栈,队列,双端队列,链表。整体看下来觉得原理不难,难的是怎么coding出这些实例(如打印机那一块我看得头疼)。

一、课后习题

由于时间有限,我只做了部分较容易的习题。

  1. 问题13: 要我们把节点个数储存在表头中,可以通过增删操作的时候不断修改表头数据来实现,增删包括add,remove,pop等。
#Q13
class Node:
    def __init__(self, initdata):
        self.data = initdata
        self.next = None
        
    def getData(self):
        return self.data
    
    def getNext(self):
        return self.next
    
    def setData(self,newdata):
        self.data=newdata
        
    def setNext(self, newnext):
        self.next=newnext
        
class UnorderedList:
    def __init__(self):
        self.head = None #初始化头节点,接地。
    
    def isEmpty(self):
        return self.head == None
    
    def add(self,item,count):
        temp = Node(item)
        temp.setNext(self.head)
        self.head = temp
        count = count+1
        return count
    
    def count2head(self,count):
        self.head.setData(count)
        
    def length(self):
        return self.head.getData()
    
        """
    方法:确认元素item是否在链表中
    Input:元素
    Output:布尔值
    """
    def search(self,item):
        current = self.head
        found = False
        while current != None and not found:
            if current.getData() == item:
                found = True
            else:
                current = current.getNext()
                
        return found
    
    """
    方法:移除某个链表中的item,且不假设这个元素一定在链表中(比课本中的情况更加general)
    Input:item
    Output:None;但是链表改变
    """
    
    def remove(self,item):
        current = self.head
        previous = None
        found = False
        while not found and current != None:
            if current == None:
                print('Error!!!Item is not in List!!!')
            else:
                
                if current.getData() == item:
                    found = True
                else:
                    previous = current
                    current = current.getNext()
            
        if previous == None:
            self.head = current.getNext()
        else:
            previous.setNext(current.getNext())
        
        self.head.setData(self.head.getData()-1)
        
    
mylist = UnorderedList()#初始化脸链表
countt=0
countt=mylist.add(31,countt)#往列表添加元素
countt=mylist.add(77,countt)
countt=mylist.add(17,countt)
countt=mylist.add(93,
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值