[算法和数据结构入门]用Python的数组实现一个栈的作用

实现一个栈

题目描述:

1.使用数组实现一个栈的数据结构,要求具有以下方法:

  • 压栈:在栈顶插入元素
  • 弹栈:弹出栈顶元素
  • 获取栈顶元素
  • 判断栈是否为空
  • 获取栈中元素个数

2.栈操作

  • 新建一个栈(命名为s1)
  • 将数组ls_1 按索引从小到大进行压栈
  • 输出栈中元素个数
  • 获取栈顶元素,保存在变量s1_gettop中,观察栈中元素个数
  • 弹出栈顶元素,保存在变量s1_poptop中,观察栈中元素个数

提示

1. 栈 (stack)

在这里插入图片描述

简介

  • 一种常用的数据结构
  • 后进先出(LIFO-last in first out):最后插入的元素最先出来

注:

  • 获取栈顶元素并未对栈本身作出改变
  • 弹出栈顶元素是在获取栈顶元素的基础上,再进行出栈操作,改变了栈。可借助列表中的pop方法

2. 题目解析

class MyStack:
    
    def __init__(self):
        self.items = []
        
    # 判断栈是否为空
    def is_empty(self):
        return len(self.items) == 0
    
    # 获取栈中元素个数
    def size(self):
        return len(self.items)
    
    # 返回栈顶元素
    def get_top(self):
        #先判断栈是否为空,如果不为空返回栈顶元素,否则返回 None
        if not self.is_empty():
            return self.items[self.size() - 1]  # 可以改为 return self.items[-1]
        
        else:
            return None
        
    #弹栈
    def my_pop(self):
        #先判断栈是否为空,如果不为空弹出栈顶元素,否则打印“栈已为空”,返回None
        if not self.is_empty():
            return self.items.pop()
        else:
            print("栈已为空!")
            return None
    
    #压栈
    def my_push(self,item):  # 注意这里有两个参数
        self.items.append(item)
        
# 数组ls_1
ls_1 = list(range(1,10,2))
ls_1
[1, 3, 5, 7, 9]

新建栈s1

s1 = MyStack()
s1
<__main__.MyStack at 0x6f27d08>

将数组ls_1 按索引从小到大进行压栈

for i in ls_1:
    s1.my_push(i)

输出栈中元素个数

print(s1.size())
5

获取栈顶元素,保存在变量s1_gettop中,打印栈中元素个数

s1_gettop = s1.get_top()
print('栈顶元素为:{}'.format(s1_gettop))
print('栈中元素个数为:{}'.format(s1.size()))
栈顶元素为:9
栈中元素个数为:5

弹出栈顶元素,保存在变量s1_poptop中,打印栈中元素个数

s1_poptop = s1.my_pop()
print('栈顶元素为:{}'.format(s1_poptop))
print('栈中元素个数为:{}'.format(s1.size()))
栈顶元素为:9
栈中元素个数为:4
# 拓展一下
class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'
lisa = Student('Lisa',99)
bart = Student('Bart',59)
print(lisa.name,lisa.get_grade())
print(bart.name,bart.get_grade())
            
Lisa A
Bart C
发布了42 篇原创文章 · 获赞 28 · 访问量 4961

猜你喜欢

转载自blog.csdn.net/KaelCui/article/details/105364571