链表:
链表可以快速插入和删除元素,用于存储数据。
链表具有指针域和数据域
链表的每个节点维护两部分:指针域和数据域
链表维护head和tail(头和尾)
每次插入元素从tail处插入新元素
用类的定义实现:
对于insert:
self.tail.next=Node(data)表示建立一个新的数据域
self.tail=self.tail.next表示建立一个指针指向这个数据
也可以用数组list模拟:
pop(idx)模拟取出第idx个元素
append(x),insert(idx,x)模拟插入元素x
(用链表模拟取出元素)
代码:
n,k,m=map(int,input().split())
a=[i for i in range (1,n+1)]
i=k%n-1##初始位置
for j in range (n):
i=(i+m-1)%len(a)##弹出元素的下标
print(a.pop(i))
栈:
先进后出(后进先出)的数据结构
每次添加元素放入栈顶,每次取出的元素也是栈顶
也可用list直接模拟:
append(x)##向栈顶添加元素
a.pop()##取出栈顶的元素
a[-1]##获取栈顶的元素
栈:1.括号匹配问题
2.表达式求值
3.递归机制的核心
4.用“先进后出”模拟解决问题
例题:
代码:
n=int(input())
a=list(input())
Flag=True
ls=[]
##左括号入栈 右括号出栈
for i in range (n):
if a[i]=="(":
ls.append(a[i])
else:
if len (ls)>=1:
ls.pop()
else:
Flag=False
if len (ls)==0 and Flag:
print("Yes")
else:
print("No")
1.听说这是一种化学规律? - 蓝桥云课 (lanqiao.cn)
代码:
# 请在此输入您的代码
a=input()
a=a.replace("5","")
a=a.replace("6","9")
a=a.replace("7","")
a=list(a)
ls=[]
for idx,i in enumerate(a):
##遇到3入栈,遇到4出栈
if i=="3":
ls.append(idx)
elif i=="4":
if len(ls)!=0:##判断是否未空
r=ls.pop()##取出最近的一个3的下标
a[idx],a[r]=a[r],a[idx]
print("".join(map(str,a)))
队列:
先进先出的数据结构
每次添加的元素放入队尾从队首取出元素
用双端队列(deque)实现
from collections import deque
a=deque(ls)
a.popleft()取出队首元素
a.pop()
a.append()队尾添加元素
a.appendleft()
from collections import deque
m,n=map(int,input().split())
a=list(map(int,input().split()))
ls=list()##表示内存
ans=0
ls=deque(ls)
for i in range(n):
if a[i] in ls:
continue
else:
if 0<=len(ls)<m:
ls.append(a[i])
ans+=1
elif len(ls)==m:
ls.popleft()
ls.append(a[i])
ans+=1
print(ans)