数据结构2.3:链表

1.顺序表和链表不同

顺序表
由系统提前分配一组连续的存储空间;
采用顺序存储的方式存储数据元素;
元素逻辑顺序与物理位置直接相关,可随机存取;
链表
由存储结点创建时主动向系统申请存储空间;
结点之间通过指针链接;
元素逻辑顺序由指针链接顺序决定,与物理位置无关,仅能顺序存取;

2.链表解决的问题

在实际情况中,尤其在多任务操作系统里,某时刻会同时运行多个进程,这些进程会向系统申请大小不同的存储空间,运行一段时间后会导致内存空间的碎片化。此时,向系统申请一片连续的存储空间极为困难,而申请一片不连续的存储空间则相对容易,链表可以很好的利用不连续的存储空间对数据元素进行存储。

3.链表结构

链表 = 通过指针链接的结点
结点 = 数据域 + 指针域
数据域-------->存储数据元素
指针域-------->存储下一结点地址
具体结构参考图2-10和图2-11

4.链表分类

链 表 = { 单 项 链 表 双 向 链 表 循 环 链 表 链表=\left\{ \begin{aligned} 单项链表 \\ 双向链表 \\ 循环链表 \end{aligned} \right. =
单项链表:结点只包括1个指针域,指向直接后继结点,最后一个结点指针域为None
双向链表:结点包括2个指针域,一个指向先驱结点,一个指向后继结点,最后一个结
          点指针域为None
循环链表:从任一结点出发,都可以知道表中其他结点
          单向循环链表:单项链表,表中最后一个指针域指向第一个结点
          双向循环列表:双向链表,表中最后一个指针域指向第一个结点

5.单链表的实现

1.初始化结点函数的实现

#初始化结点函数
class Node(): 
    def __init__(self,data):
        self.data=data #创建数据域并初始化为data
        self.next=None #next为系统函数,创建数据域并初始化为空

2.初始化头结点并创建单链表函数

#初始化头结点函数
class SingleLinkedList(): 
    def __init__(self):
        self.head = Node(None)
        
    #创建单链表
    def CreatSingleLinkedList(self):
        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        print("请输入数据后按回车键结束,若想结束按#")
        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        cNode=self.head
     
        Element=input("请输入当前结点的值:")
        while Element !="#":
            nNode = Node(int(Element))
           
            
            cNode.next = nNode
           
           
            cNode = cNode.next
         
           #nNode,cNode.next和cNode的值一样,均是结点的地址
            Element=input("请输入当前结点的值:")
            
    #尾端插入元素函数
    def InserElementInTail(self):
        Element=input("请输入待插入结点的值:")
        if Element =="#":
            return
        cNode=self.head
        nNode=Node(int(Element))
        while cNode.next!=None:
            cNode=cNode.next
        cNode.next=nNode 
    #首端插入元素函数
    def InserElementInHead(self):
        Element=input("请输入待插入结点的值:")
        if Element=="#":
            return
        cNode=self.head
        nNod
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值