草稿箱,无用且不完整,请忽略11【链表】

250

'''250,输入若干个数,以读到0为结尾(0只是结束符,不算数字)构建一个双循环链表'''

data_a=[]
head_a=-1

s=input("输入若干个数:")
num = [int(n) for n in s.split()]
print(num)
data_a.append([int(num[0]),head_a,head_a])
print(data_a)
head_a=0
i=1
while(num[i]!=0):
    data_a.append([int(num[i]),data_a[i-1][1],i-1])
    #print('1:',data_a)
    data_a[i-1][1]=i
    print( data_a)
    i+=1
data_a[i-1][1]=0

print(data_a)

251

'''
251,输入若干个数,以读到0为结尾(0只是结束符,不算数字)构建一个直线双链表。
然后再输入M个数,每次给出一个数字K,表示要把链表中的第K个数字删除。请编程输出删除后的链表。
'''

data_a=[]
head_a=-1

s=input("输入若干个数:")
num = [int(n) for n in s.split()]
print(num)
data_a.append([int(num[0]),head_a,head_a])
print(data_a)
head_a=0
i=1
while(num[i]!=0):
    data_a.append([int(num[i]),data_a[i-1][1],i-1])
    data_a[i-1][1]=i
    i+=1
data_a[i-1][1]=-1
print(data_a)

M=input("输入M:")
add_M= [int(n) for n in input('输入M个数字:').split()]
print(add_M)
k=i
for j in range(int(M)):
    data_a[i-1][1]=i
    data_a.append([int(add_M[j]), data_a[k-1][1], k-1])
    data_a[k - 1][1] =k
    k+=1
    j+=1
data_a[k - 1][1] = -1
print(data_a)

K=input("输入K:")

# for p in range(int(K)-1):
# temp=data_a[p][0]
p=int(K)-1
data_a[p-1][1]=data_a[p][1]
data_a[p+1][2]=data_a[p][2]

print('jieguo:',data_a)

253

'''
253,有N个人编号1到N,现在环形站位,从第1个人开始数1,以此类推,
直到一个人数到K了,这个人则退圈。输入N,K,利用双循环链表,依次输出退圈的编号。
'''

data_a=[]
head_a=-1

s=input("输入若干个数:")
num = [int(n) for n in s.split()]
print(num)
data_a.append([int(num[0]),head_a,head_a])
print(data_a)
head_a=0
i=1
while(num[i]!=0):
    data_a.append([int(num[i]),data_a[i-1][1],i-1])
    data_a[i-1][1]=i
    i+=1
data_a[i-1][1]=0

print(data_a)
# data_a = [[1, -1, 1], [2, 0, 2], [3, 1, 3], [4, 2, 0]]
i = 0
k=input('输入K:')
k = int(k)
l = len(data_a)
print(data_a)
while l:
    j = 1
    while j < k:
        j += 1
        i = data_a[i][1]  # next的index
    print(data_a[i][0])
    data_a[data_a[i][2]][1] = data_a[i][1]  # pre的next->原的next
    data_a[data_a[i][1]][2] = data_a[i][2]  # next的pre->原的pre
    i = data_a[i][1]
    l -= 1
3

链表的创建

#链表的创建
item=[]
head=-1
#head值为-1,代表指针指向为空,该列表是空列表

链表的尾部插入

#尾部插入链表
import random
data_a=[]
head_a=-1
tmp=random.randint(95,100)
data_a.append([tmp,head_a])
head_a=0
for i in range(1,20):
    tmp=data_a[i-1][0]-random.randint(1,5)
    data_a.append([tmp,data_a[i-1][1]])
    data_a[i-1][1]=i
print(data_a)

#链表的中间插入

#链表的中间插入
import random 
data_a=[]
head_a=-1
tmp=random.randint(95,100)
data_a.append([tmp,head_a])
head_a=0
print("链表一")
print(data_a)
for i in range(1,20):
    tmp=data_a[i-1][0]-random.randint(1,5)
    data_a.append([tmp,data_a[i-1][1]])
    data_a[i-1][1]=i
data_a.append([1,20])
data_a[0][1]=20
data_a[20][1]=1

双链表的创建和尾插

from random import randint
data_a=[]
head_a=-1
tmp=randint(95,100)
data_a.append([tmp,head_a,head_a])
head_a=0
for i in range(1,5):
    tmp=data_a[i-1][0]-randint(1,5)
    data_a.append([tmp,data_a[i-1][1],i-1])
    data_a[i-1][1]=i
print("链表一:")
print(data_a)

有序链表的合并

#有序链表的合并

from random import randint
data_a=[]
head_a=-1
data_b=[]
head_b=-1
#生成链表1
tmp=randint(95,100)
data_a.append([tmp,head_a])
head_a=0
for i in range (1,5):
    tmp=data_a[i-1][0]-randint(1,5)
    data_a.append([tmp,data_a[i-1][1]])
    data_a[i-1][1]=i
print ("序列1")
print (data_a)
#生成链表2
tmp=randint(95,100)
data_b.append([tmp,head_b])
head_b=0
for i in range (1,5):
    tmp=data_b[i-1][0]-randint(1,5)
    data_b.append([tmp,data_b[i-1][1]])
    data_b[i-1][1]=i
print ("序列2")
print (data_b)


k_a=head_a
q_a=head_a#前驱节点
k_b=head_b
while(k_a!=-1 and k_b!=-1): 
    if data_a[k_a][0]>=data_b[k_b][0]:#data_a中的数据大
        q_a=k_a
        k_a=data_a[k_a][1]#指针前进
    else:#data_b 中的数据大
        if k_a==head_a:#需要修改头节点
            data_a.append([data_b[k_b][0],head_a])
            head_a=len(data_a)-1#修改头节点
            q_a=head_a
            k_b=data_b[k_b][1] 
        else:#中间位置,不需要修改头节点
            data_a.append([data_b[k_b][0],k_a])
            data_a[q_a][1]=len(data_a)-1
            q_a=data_a[q_a][1]
            k_b=data_b[k_b][1]
while k_b!=-1:#data_b 中有剩余元素
    data_a.append([data_b[k_b][0],-1])
    data_a[q_a][1]=len(data_a)-1
    q_a=data_a[q_a][1]
    k_b=data_b[k_b][1]
print ("新序列:")
print (data_a)
print ("链表顺序")
tmp=head_a
while data_a[tmp][1]!=-1:
    print (data_a[tmp][0],end=" ")
    tmp=data_a[tmp][1]
print(data_a[tmp][0])



有序链表的去重

from random import randint
data_a=[]
head_a=-1

#生成链表1
tmp=randint(95,100)
data_a.append([tmp,head_a])
head_a=0
for i in range (1,20):
    tmp=data_a[i-1][0]-randint(0,2)
    data_a.append([tmp,data_a[i-1][1]])
    data_a[i-1][1]=i
print ("序列1")
print (data_a)

tmp_a=0
k_a = data_a[tmp_a][1]
# q_a=head_a
while(k_a!=-1):
    # 
    k_a = data_a[tmp_a][1]
    # 
    tmp1=data_a[tmp_a][0]
    k=data_a[k_a][0]
    #
    if k==tmp1:
        data_a[tmp_a][1]=data_a[k_a][1]
    else:
        tmp_a=data_a[tmp_a][1]
        #

print("链表顺序")
t=head_a
while data_a[t][1]!=-1:
    print (data_a[t][0],end=" ")
    t=data_a[t][1]
print(data_a[t][0])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值