python 入门学习3 链表

参考文章http://blog.csdn.net/qq490691606/article/details/49945287

链表是一种 动态数据结构,他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结点:node”,每一个结点都是油数据域和指针组成的,跟 数组不同的是,链表不用预先定义大小。与数组的不同:

1.数组需要预先设定大小,无法适应数据动态的增减,数据小于定义的长度会浪费内存,数据超过预定的长度无法插入。而链表是动态增删数据,可以随意增加。

2数组使用与获取元素的操作,直接get索引即可,链表对于获取元素比较麻烦,需要从头一直寻找,但是使用与增删,直接修改结点的指向即可,但是对于数据就比较麻烦,例如需要在[1,2,3,4]下标为1的位置插入-2,需要将【2 3 4】后移,赋值ls[1]=-2

3数组从栈中分配内存,对于程序员方便快速,但是自由度小,而链表从堆中分配内存,自由度大但是申请管理比较麻烦。

链表的基本实现方法:

初始化链表

翻转单向链表

Class ListNode(Object):

def __init__(self,val,next=None):

self.val=val

self.next=next


def display_list(head):

vals=[]

while head:

vals.append(str(head.val))

head=head.next

else:

print("-->".join(vals))


def reverse(head):#反转链表

new_head=None

while head:

node=head

head=head.next

node.next=new_head

new/-head=node

return new_head


#获取链表长度


def __len__(self):

pre=self.head

length=0

while pre:

length+=1

pre=pre.next

return length

#追加结点

如果head结点不存在,则当前节点为head结点,否则的话找到尾结点,将尾结点的next指向当前结点可以添加head和tail两个结点,就不用递归寻找尾结点 

def append(self,data)

node=Node(data)

if self.head is None:

self.head=node;

else:

pre=self.head

while pre.next:

pre=pre.next

pre.next=node


#python使用@property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式

import traceback


class Screen(object):
    def __init__(self,width,hight):
        self.__width=width
        self.__hight=hight
        
    @property
    def width(self):
        return self.__width
    @width.setter
    def width(self,value):
        self.__width=value
    @property
    def hight(self):
        return self.__hight
    @hight.setter
    def hight(self,value):
        self.__hight=value
    @property
    def resolution(self):
        return self.__hight*self.__hight
    
s=Screen(1024,768)
print(s.resolution)
s.width=75
s.hight=23
print(s.resolution)
try:
    s.width='abc'
except ValueError:
    traceback.print_exc()
try:
    s.resolution=990
except AttributeError:
    traceback.print_exc()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值