数据结构_python_栈

1.栈(stack),有进有出,有顺序结构和链表结构。在操作上有进有出,形成了线性结构的关系。
(1)链表结构,在内存上存储的位置可以是一块一块的,通过指针的指向将他们连接在一起。可以灵活运用内存,但算法较为复杂。
(2)顺序结构,是用数组来实现,比较简单,但是数组大小是事先规划好的,大了浪费内存,小了不够用。

2.栈的操作总是在栈顶进行(top),分别使用压入(push)、弹出(pop)操作对数据进行写入和读取。

3.如果用排队来比喻栈,链表结构就是银行的取号排队,顺序结构就是食堂打饭窗口排队。队尾就是栈顶,队尾的那个人走了就是弹出,队尾又来了一个人就是压入,那么那个人就是新的栈顶。

4.实现
(1)用数组实现:数组实现栈
(2)用链表实现:

import numpy as np
class Node():
    def __init__(self):
        self.data=0#栈首
        self.next=None#指向

top=None

def is_empty():
    if top==None:
        return True
    else:
        return False

def push(data):
    global top
    new_data=Node()
    new_data.data=data
    # print("t0",top)
    new_data.next=top#将new_data指向上一个元素,即上一个栈首  将上一个栈首的值赋给new_data.next
    # print("t1",top)
    top=new_data#将top更新为栈首
    # print("t3",top)

# 给栈赋一些值用于测试
for i in range(10):
    # print(i)
    # print()
    push(np.random.randint(1,10))

def show_element():
    global top
    temp_list=[]
    while top!=None:
        ptr = top
        temp = ptr.data
        temp_list.append(temp)
        top = top.next
    print(temp_list)
    temp_list.reverse()
    for data in temp_list:
        push(data)

def pop():
    global top
    if is_empty():
        print("空栈,弹出失败")
    else:
        ptr=top
        temp=ptr.data
        top=top.next
        print(temp)
operate=4
while operate!=0:
    print("入栈操作请输入1,出栈操作请输入2,查看当前栈的使用情况请输入3,结束请输入0")
    operate=int(input("输入:"))
    if operate==1:
        data=int(input("输入入栈的数值:"))
        push(data)
    elif operate==2:
        pop()
    elif operate==3:
        show_element()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值