python代码——栈和队列

python代码——栈和队列

顺序栈:

class SqStack():
    def __init__(self,length):
        self.top = -1
        self.stlist=[]
    #判断是否为空
    def is_empty(self):
       return self.top == -1
    #返回栈顶元素
    def get_element(self):
        if self.is_empty():
            raise IndexError("空栈,无法获取栈顶")
        else:
            return self.stlist[self.top]
    #返回栈的长度
    def get_length(self):
        return self.top+1
    #进栈
    def append(self,ele):
        self.top += 1
        self.stlist.append(ele)
    #出栈
    def remove(self):
        if self.is_empty():
            return None
        else:
            self.stlist.pop()
            self.top -= 1
    #清空栈
    def clear(self):
        self.stlist = []
        self.top = -1
    
    #查看所有元素
    def ShowList(self):
        return self.stlist
    
    #查看位置指定元素
    def LocateElem(self,i):
        if i > self.top:
            return '超过指定位置'
        else:
            return self.stlist[i]

链栈:

class SingleStack():
    # 结点类初始化
    def __init__(self,item):
        self.item = item 
        self.next = None

# 定义单链表
class SingleLinkStack():
    # 链表栈初始化
    def __init__(self):
        self.head = None
        self.top = 0  #累计栈链表长度
    
    # 判断链表是否为空
    def is_empty(self):
        return self.top == 0

    # 输出链表长度
    def get_length(self):
        return self.top

    # 返回栈顶元素
    def stacktop(self):
        if self.is_empty():
            return '栈为空'
        else:
            return self.head.item

    # 进栈
    def add(self,newItem):
        elem = SingleStack(newItem)
        cur = self.head
        if self.top == 0:
            self.head = elem
        else:
            elem.next = self.head
            self.head = elem
        self.top += 1

    # 出栈
    def remove(self):
        if self.is_empty():
            return '栈为空'
        else:
            self.head = self.head.next
            self.top -= 1

    # 清空链表
    def clear(self):
        self.head = None
        self.top = 0

队列顺序表示:

class QueueList():
    #初始化队列
    def __init__(self):
        self.top = -1      #指向队头
        self.rear = -1     # 指向队尾
        self.stlist = []  #储存队列数据

    #判断队列是否为空
    def is_empty(self):
        return self.top == -1
    
    #返回队头元素
    def queuetop(self):
        if self.top == -1:
            return '队列为空'
        return self.stlist[self.top]

    #返回队列的长度
    def get_length(self):
        return self.rear + 1
    
    #入队
    def append(self,elem):
        self.stlist.append(elem)
        self.rear += 1
    
    #出队列
    def remove(self):
        if self.is_empty():
            return '队列为空'
        else:
            self.stlist.pop(self.top)
            self.rear -= 1
    
    #清空队列
    def clear(self):
        self.stlist = []
        self.top = -1
        self.rear = -1
    
    #查看所有元素
    def ShowList(self):
        return self.stlist

队列链式表示:

class SingleQueue():
    # 结点类初始化
    def __init__(self,item):
        self.item = item 
        self.next = None

# 定义单链队列
class SingleLinkQueue():
    # 链式队列初始化
    def __init__(self):
        self.head = None  #头指针
        self.rear = None  #尾指针
        self.top = 0      #队列长度
    
    # 判断队列是否为空
    def is_empty(self):
        return self.top == 0

    # 输出队列长度
    def get_length(self):
        return self.top

    # 返回队列顶元素
    def queuetop(self):
        if self.is_empty():
            return '队列为空'
        else:
            return self.head.item

    # 进队列
    def add(self,newItem):
        elem = SingleQueue(newItem)
        if self.top == 0:
            self.head = elem
            self.rear = elem
        else:
            self.rear.next = elem
            self.rear = elem
        self.top += 1

    # 出队列
    def remove(self):
        if self.is_empty():
            return '队列为空'
        elif self.get_length() == 1:
            self.head = None
            self.rear = None
            self.top = 0
        else:
            self.head = self.head.next
            self.top -= 1

    #遍历队列
    def travel(self):
        queuelist = []
        if self.top == 0:
            return '队列为空'
        cur = self.head
        while cur != None:
            queuelist.append(cur.item)
            cur = cur.next
        return queuelist

    # 清空链表
    def clear(self):
        self.head = None
        self.rear = None
        self.top = 0

双端队列的顺序表示:

class DoubleQueue():
    # 结点类初始化
    def __init__(self,item):
        self.item = item 
        self.next = None

# 定义双端队列
class DoubleLinkQueue():
    # 链式队列初始化
    def __init__(self):
        self.head = None  #头指针
        self.rear = None  #尾指针
        self.top = 0      #队列长度
    
    # 判断队列是否为空
    def is_empty(self):
        return self.top == 0

    # 输出队列长度
    def get_length(self):
        return self.top

    # 返回队头元素
    def queuetop(self):
        if self.is_empty():
            return '队列为空'
        else:
            return self.head.item
    
    #返回队尾元素
    def queuerear(self):
        if self.is_empty():
            return '队列为空'
        else:
            return self.rear.item

    #头进
    def add_first(self,newItem):
        elem = DoubleQueue(newItem)
        if self.top == 0:
            self.head = elem
            self.rear = elem
        else:
            elem.next = self.head
            self.head = elem
        self.top += 1

    # 尾进
    def add_last(self,newItem):
        elem = DoubleQueue(newItem)
        if self.top == 0:
            self.head = elem
            self.rear = elem
        else:
            self.rear.next = elem
            self.rear = elem
        self.top += 1

    # 头出
    def remove_first(self):
        if self.top == 0:
            return '队列为空'
        elif self.top == 1:
            self.head = None
            self.rear = None
            self.top = 0
        else:
            self.head = self.head.next
            self.top -= 1

    #尾出
    def remove_last(self):
        if self.top == 0:
            return '队列为空'
        elif self.top == 1:
            self.head = None
            self.rear = None
            self.top = 0
        else:
            cur = self.head
            while cur.next != self.rear:
                cur = cur.next
            self.rear = cur
            self.rear.next = None
            self.top -= 1

    #遍历队列
    def travel(self):
        queuelist = []
        if self.top == 0:
            return '空'
        cur = self.head
        while cur != None:
            queuelist.append(cur.item)
            cur = cur.next
        return queuelist

    # 清空链表
    def clear(self):
        self.head = None
        self.rear = None
        self.top = 0

 

posted @ 2022-04-25 14:41  hungry_J  阅读(12)  评论(0)    收藏  举报