#!/usr/bin/envpython
#-*-coding:utf-8-*-#
Time:/3/:29#Author:白宇#
File:exam1.py#用于服务语句importtime#单链表的节点classNode(object):def__init__(self,item):#item存放数据元素self.item=item#next是下一个节点的标识self.next=None#单链表classSingleLinkList(object):#头节点def__init__(self):self._head=None#判断链表是否为空defis_empty(self):returnself._headisNone#获取链表长度deflength(self):#初始指针指向headcur=self._headcount=0#指针指向None表示到达尾部whilecurisnotNone:count+=1#指针下移cur=cur.nextreturncount#遍历链表defitems(self):#获取head指针cur=self._head#循环遍历whilecurisnotNone:#返回生成器yieldcur.item#指针下移cur=cur.next#向链表头部添加元素defadd(self,item):node=Node(item)#新结点指针指向原头部结点node.next=self._head#头部结点指针修改为新结点self._head=node#尾部添加元素defappend(self,item):node=Node(item)#先判断是否为空链表ifself.is_empty():#空链表,_head指向新结点self._head=nodeelse:#不是空链表,则找到尾部,将尾部next结点指向新结点cur=self._headwhilecur.nextisnotNone:cur=cur.nextcur.next=node#指定位置插入元素definsert(self,index,item):#指定位置在第一个元素之前,在头部插入ifindex=0:self.add(item)#指定位置超过尾部,在尾部插入elifindex(self.length()-1):self.append(item)else:#创建元素结点node=Node(item)cur=self._head#循环到需要插入的位置foriinrange(index-1):cur=cur.nextnode.next=cur.nextcur.next=node#根据元素删除节点defremove(self,item):cur=self._headpre=NonewhilecurisnotNone:#找到指定元素ifcur.item==item:#如果第一个就是删除的节点ifnotpre:#将头指针指向头节点的后一个节点self._head=cur.nextelse:#将删除位置前一个节点的next指向删除位置的后一个节点pre.next=cur.nextreturnTrueelse:#继续按链表后移节点pre=curcur=cur.next#查找元素是否存在deffind(self,item):returniteminself.items()#主界面defstartChose():#服务语句print("\n欢迎进入白宇的图书管理系统~\n")print("白宇为您提供以下服务:")print("0.摸摸作者")print("1.新建图书")print("2.查阅图书信息")print("3.插入单本图书到书库中")print("4.删除图书")print("5.统计图书个数")print("6.退出\n")#检测书库书本数量是否为0books=0foriinlink_list.items():books=books+1#第一次为0,需要强制新建图书信息ifbooks==0:print("叮~检测到您的书库阅本数量为0,请您先选择哦~")