当前位置: 首页 > news >正文

数据结构与算法实验练习(四)(排序及线性表的应用)

数据结构与算法分析课下实验练习,现记录一下解答过程,欢迎大家批评指正。

声明:本题目来源于西安交通大学电信学院原盛老师,任何单位或个人在使用、转载或引用本题目时,请务必标明出处为“西安交通大学电信学院原盛老师”。

练习四:关于队列-基数排序的扩展


利用队列实现对某一个数据序列的排序(采用基数排序),对数据序列的数据(第 1 和第 2 条进行说明)有如下的要求:

1. 当数据序列是整数类型的数据的时候,数据序列中每个数据的位数不要求等宽,比如:

1、21、12、322、44、123、2312、765、56

2. 当数据序列是字符串类型的数据的时候,数据序列中每个字符串都是等宽的,比如:

"abc","bde","fad","abd","bef","fdd","abe"


第一问

本题是利用基数排序进行的。

基数排序即从个位开始排序,然后排十位,百位等,最后得到一个排序好的结果。

在进行基数排序之前,我们还要先创建队列数据类型。 然后创建 10 个队列并将其放进一个数组中。其次计算输入的数的最大位数,这决定着循环次数。接着遍历列表,将其放入队列中,然后得到新的列表,在进行十位数的遍历然后依次类推。

先创建队列数据类型:

#顺序队列(没有头结点,有状态变量)
class Queue1:def __init__(self,maxsize):self.maxsize=maxsizeself.arrq=maxsize*[None]self.front=0self.rear=0self.size=0def clear(self):self.front=self.rearself.size=0def enqueue(self,data):if self.size==self.maxsize:return print('当前队列为满,无法进队!')self.arrq[self.rear]=dataself.rear=(self.rear+1)%self.maxsizeself.size+=1def dequeue(self):if self.size==0:return print('当前队列为空,无法进行出队!')self.front=(self.front+1)%self.maxsizeself.size-=1def print(self):m=[]if self.size==0:return m       x=self.frontwhile x!=self.rear:m.append(self.arrq[x])x=(x+1)%self.maxsizereturn m

接着对数字类型进行排序:

#对不等宽的数字而言
from queue1 import Queue1
#创建桶 桶由队列构成
stack=[]
for i in range(10):stack.append(Queue1(10))
x=[1,12,21,322,123,44,2312,765,56]
#首先要测出最大位数,决定着循环几次
def w(array):max = array[0]for i in array:if max < i:max = itimes = 0while max > 0:max = int(max/10)times += 1return times
for i in range(w(x)):for k in range(len(x)):m=x[k]//(10**i)%10stack[m].enqueue(x[k])x=[]for a in range(10):x=x+stack[a].print()stack[a].clear()print(x)

结果输出:

第二问

对字母排序和对数字排序相差不大。这里我没有考虑字母的大小写,如有需要,请自改代码。

from queue1 import Queue1
# 字母情形
x=["abc","bde","fad","abd","bef","fdd","abe"]
w=len(x[0])
#需要创建26个栈
stack=[]
for i in range(26):stack.append(Queue1(10))
#a的ASCII是97  z的ASCII是122
for i in range(w):for k in range(len(x)):m=x[k][-i-1]stack[ord(m)-97].enqueue(x[k])x=[]for a in range(10):x=x+stack[a].print()stack[a].clear()
print(x)

结果输出:


http://www.mrgr.cn/news/63652.html

相关文章:

  • 最新的软件测试热点面试题(答案+解析)
  • 代码随想录 -- 动态规划 -- 不同路径 II
  • 用Python设置、更新和获取Excel单元格的值
  • SpringCloud Alibaba-05 Seata分布式事务处理
  • 点成案例 | 如何精准测定胰腺癌与结肠癌细胞的尺寸
  • 线上3D看车有何优势?
  • 爬虫日常实战
  • Java项目实战II基于Java+Spring Boot+MySQL的桂林旅游景点导游平台(开发文档+数据库+源码)
  • openai api 文件分析/联网/画图代码示例
  • 2024年10月文章一览
  • 为什么服务器几乎都是Linux操作系统?
  • 怎样提取视频中的音频?分享五款好用软件!
  • 【MX-S4-T2】「yyOI R2」youyou 不喜欢夏天
  • 智能嵌入式机械臂开发攻略
  • Oracle 第18章:分区技术
  • 【AI日记】24.11.01 LangChain、openai api和github copilot
  • flex 布局比较容易犯的错误 出现边界超出的预想的情况
  • Hadoop期末复习(完整版)
  • 使用OCR识别手写文本
  • dc源码铺子应用部署教程
  • CSS3简介(一)
  • 关于SDF系列文章,写在前
  • Raspberry Pi OS 树莓派的新版本
  • [论文阅读]LOGAN: Membership Inference Attacks Against Generative Models
  • ssm+vue657基于spring和vue开发的web新闻流媒体平台
  • Go语言的使用