线性表

2019-12-22 19:51栏目:龙竞技官网
TAG:

图片 1

  1. f(n)以elems的第一维度的变量list作函数计算直到遍历完整个elems
    关于 initializer的说明为:
    If no initializer is provided, the output structure and dtypes of fn are assumed to be the same as its input; and in this case, the first argument of fn must match the structure of elems.
    If an initializer is provided, then the output of fn must have the same structure as initializer; and the first argument of fn must match this structure.
    也就是说当initializer给定的时候,fn的输出结构必须和initializer保持一致,且fn的第一个参变量也必须和该结构一致。而如果该参数没有给定的时候初始化默认和x[0]的维度保持一致。

    设函数为f, x = [u(0),u(1),...,u(n)] y = tf.scan(f,x,initializer=v(0)) 此时f的参数类型必须是(v(0),x),f的输出必须和v(0)保持一致,整个计算过程如下: v(1)=f(v(0),u(0)) v(2)=f(v(1),u(1)) .... v(n+1)=f(v(n),u(n)) y=v(n+1)

    node=DulNode(1)

defa(elem,It=None):It=ItifItelse[]It.insert(0,elem)returnIt这是我看的用It=None来变相实现函数重载的方法,但是我不太懂函数里面那个ifelse语句具体的意思,求大佬帮忙,谢谢了

tf.scan(fn, elems, initializer=None, parallel_iterations=10, back_prop=True, swap_memory=False, infer_shape=True, name=None)

        if p.elem == elem:

具体参数定义可以参见官网,这里捡最常见的形式来说,常用函数形式为tf.scan(fn, elems, initializer=None)
函数说明:scan on the list of tensors unpacked from elems on dimension

        self._head=None

3 <class '__main__.Lnode'>

    p = node

            return p.next

    for i in range(2,11):     # 创建多个节点,并将各个节点链接起来

    if pos != 'not found':

            if p.next != None:

                next.pre = before

            return p

1 <class '__main__.Lnode'>

        p=p.next

        else:

8 <class '__main__.Lnode'>

1 <class '__main__.Lnode'>

5 <class '__main__.Lnode'>

        p=self._head

            p=p.next

    q=Lnode(12)

定义一个initnode方法来初始化链表,并且返回头节点的位置,也就是head

            return p

            print p.elem,p.__class__

        if p.elem == elem:

mlist.printall()

    while p is not None:

                before=p.pre

    ret=initnode()

                return 'delete'

#打印所有的节点

        print p.elem,p.__class__

    for i in range(2,11):

7 <class '__main__.Lnode'>

if __name__=="__main__":

    mlist=LList()

2 <class '__main__.Lnode'>

这个例子只是简单的一个链接表生成的例子,其中只有链接表的初始功能,也就是将各个节点链接起来。但是在这个例子中并没有实现插入和删除的操作。

 

        if p.elem == elem:

def initnode():

if __name__=="__main__":

        self.next=next_

 

通过p.next.elem == elem的判断找到了需要删除元素的前一个节点。

            self._head=Lnode(elem)

10 <class '__main__.Lnode'>

下面来看下具体的实现,首先定义一个类,类似与c语言中的struct。并在初始化的时候初始化elem(具体的值),next指向下一个元素,初始化为None.

12 <class '__main__.Lnode'>

输出如下:

    def __init__(self,elem,next_=None):

def initDulnode():

 

        mlist.append(i)

    p=head

        if p.next.elem == elem:

    def __init__(self,elem,next_=None,pre_=None):

    return 'not found'

    ret=initnode()

4 <class '__main__.Lnode'>

5 <class '__main__.Lnode'>

        p.next=Lnode(i)

6 <class '__main__.Lnode'>

    def append(self,elem):

    q.next=head   #将数据插入到头节点。注意没有空的头节点,因此初始化的时候没有空头节点,如果有空的头节点的话那么插入语句应该是q.next=head.next, head.next=q

return 'not found

而链接表正好能弥补线性表的缺点。链接表的组织方式有点类似即插即用的设备,不要需要提前申请内存大小。也不要求数据的内存连续。每个结点都分别存储在一批独立的存储块。每个节点都能找到与其相关的下一个节点。

 

        p=p.next

            p=p.next

4 <class '__main__.Lnode'>

class LList(object):

        p=p.next

8 <class '__main__.Lnode'>

2 <class '__main__.Lnode'>

在C语言中,顺序表通常通过数组或者申请一块内存来实现。在python中有列表和元组的结构可供使用,但由于元组一旦申请后无法改变空间大小和值,因此只有列表可以完成线性表的作用

        tmp=pos.next

基于以上的实现,我们可以这些功能都封装在一个类里面

return 'not found'

输出结果如下:

        self.elem=elem

            return p.pre

        tmp.pre=p

        pos.next=tmp.next

版权声明:本文由龙竞技官网发布于龙竞技官网,转载请注明出处:线性表