## 课题要求:
设计实现一个小型英汉双解词典(***)
问题描述:设计一个英汉双解电子词典,支持查找、插入、删除等功能。
基本要求:实现字典常用的数据结构包括有序表、AVL树、Patricia Tree(简称PAT tree,它是一棵压缩存储的二叉树结构)、散列表等,可以选择
一种数据结构,实现字典的基本操作,查找单词、插入单词(插入时,先查找,找不到则插入,找到则提示用户)、删除单词(删除时,先查找,找到
则删除,找不到则提示用户)等。字典是按字母顺序排列的,不能用顺序查找,插入或删除单词后,要保持字典的有序性。
测试数据:任一英文单词。
考核要求:
(1)至少选两种以上的数据结构实现字典的查找、插入、删除等操作,
(2)如果采用线性结构且无序,成绩为不及格。
(3)设计图形用户界面。
提示:字典可以自己建立,但必须按字母a~z建立26个文件,建议从网上下载,文件类型为txt。
达到以上考核要求,成绩为优秀,否则成绩向下浮动。
## (一)软件的基本功能
使用的数据结构包括、AVL树、Trie树、散列表,实现字典的基本操作,查找单词、插入单词(插入时,先查找,找不到则插入,找到则提示用户)、删除单词(删除时,先查找,找到则删除,找不到则提示用户)
## (二)软件的提高功能
实现了图形界面,具有良好的交互。
Trie树实现模糊搜索。
## (三)输入/输出形式
输入:英文字符串
输出:显示在列表域里
## (四)使用的数据结构:
AVL树,trie树,hash表
## (五)主程序流程
![20230906121919](https://img.xlonglong.cn/img/20230906121919.png)
## (六)模块调用关系
![20230906121941](https://img.xlonglong.cn/img/20230906121941.png)
## (七)现概要设计的数据类型
### 一、AVL树:
AVL树其实就是一种改进后的二叉搜索树,他带有平衡因子,不会出现像二叉搜索树那样都排到一端极端情况,AVL树也可以叫做自平衡二叉搜索树。他的关键就是通过旋转,从而让树达到一个平衡状态,而在旋转的过程中,也要保持左小右大的特征
(1).AVL树的插入操作:本质上是在普通二叉搜索树的插入操作上加了判断操作,递归的判断每一节点是否平衡,如果不平衡,就进行旋转操作,而旋转操作分为四种情况
四种旋转情况:
1.RR型不平衡:插入的元素是右子树的右子树,这时候需要左旋
![20230906122126](https://img.xlonglong.cn/img/20230906122126.png)
2.LL型不平衡:插入的元素是左子树的左子树:这时候需要右旋
![20230906122133](https://img.xlonglong.cn/img/20230906122133.png)
3.LR型不平衡:插入的元素是左子树的右子树:这时候需要左旋再右旋
![20230906122147](https://img.xlonglong.cn/img/20230906122147.png)
4.RL型不平衡:插入的元素是右子树的左子树:这时候需要右旋再左旋
![20230906122154](https://img.xlonglong.cn/img/20230906122154.png)
(2).AVL树的删除
AVL树的删除有些复杂,具体步骤也是在二叉排序树的删除上进行优化,分为三种情况,首先找到要删除的节点
1.删除叶子节点,直接删,然后递归判断是否平衡,进行旋转
2.只有一个孩子:
<1>.只有左子树:直接将左子树的值赋给该节点
<2>.只有右子树:直接将右子树的值赋给该节点
3.同时拥有左右子树:
普通的二叉搜索树,只要将左子树的最右节点或者右子树的最左节点赋给该节点就可以了,AVL树就是在这步上,进行了选择,以用来优化删除过程的速度。我们可以比较该节点的左右子树高度,选择较高点的一方。
如果左子树高度大于右子树高度,则找到左子树的最右节点,将该节点赋予要删除的节点,最后再删除最右节点。
如果右子树高度大于左子树高度,则找到右子树的最左节点,将该节点赋予要删除的节点,最后再删除最左节点。
以上是删除过程。
落实到代码上,又有一点不一样,
我们在查找那个点的过程(递归实现)中,就要根据要删除点的大小,来判断是向右子树还是向左子树走下去,当回来的时候,已经就实现了删除,这时候就得判断是否失衡,所以在向下走的时候,就得在每一步之后,进行判断,这里和插入的过程中一样,就是以上那四种情况。进行左旋或者右旋。
### 二、Trie树:
Trie树是一种字典树,在python中,利用字典来实现,每个数据的key是字母,value是一个节点,该节点储存着val关键值,来记录该点是否为一个单词,还有chines来记录该点的中文。以及child{},来储存接下来的数据
![20230906122300](https://img.xlonglong.cn/img/20230906122300.png)
``` python
class trie_node:
def __init__(self) -> None:
self.chines=""
self.child={}
self.val=False#该节点是否构成单词
```
Trie树的查找:给定一个单词,遍历该单词的每个字母,然后在node的child中找这个字母,如果找到了就继续往下找,没找到的话就直接退出,走到最后判断node的val是否为True,如果为True,则找到该单词。否则不存在。
Trie树的删除和插入都和查找差不多,插入操作就是,从根节点开始,遍历所要插入的单词,如果遍历的字母不存在那么就创造一个新的点来存储这个字符,直到最后,将val标为True
删除操作就更简单了,先查找,如果找到,就将该节点的val标为False
Trie树的可以实现一定程度的模糊查找:
![20230906122350](https://img.xlonglong.cn/img/20230906122350.png)
![20230906122341](https://img.xlonglong.cn/img/20230906122341.png)
利用trie树的特殊储存结构,来查出具有相同前缀的单词
### 三、哈希表:
处理冲突:采用拉链法处理冲突
哈希函数为:
将一个单词的每个字母的Unicode编码乘以该字母在字符串的对应位置,最后取和。
例:`cat,index=(ord(c)*0+ord(a)*1+ord(t)*2)%mod`
## 四、图形界面:
图形界面我使用的是pyside6,实现图形界面
## 补充
环境:windows 10 x64
用到的第三方模块:PySide6
用到的数据结构:AVL树、trie树、哈希表。
开发工具:vs-code 1.70.1
完成日期:2022年12月
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
大二上的数据结构课设,采用python实现一个包含三种数据结构的英汉词典, (105个子文件)
main.exe 37.94MB
iconn.ico 4KB
iconn.ico 4KB
3aa5199a-64ef-46ff-b499-d1a33c9217c9.jpg 84KB
3aa5199a-64ef-46ff-b499-d1a33c9217c9.jpg 84KB
8dbfaa7d-5565-441c-85fd-69df778e09f0.jpg 49KB
8dbfaa7d-5565-441c-85fd-69df778e09f0.jpg 49KB
图标2.jpg 44KB
图标2.jpg 44KB
bb66d25b-f85f-4877-8d1c-062801b9a1ed.jpg 23KB
bb66d25b-f85f-4877-8d1c-062801b9a1ed.jpg 23KB
icon.jpg 18KB
icon.jpg 18KB
README.md 7KB
avl树.md 449B
e52a74d6d2691c5c38de636fe3fe0ec3934d7766cf7a1384d1c3551bb69ad7a7.png 397KB
e477f4934e5dd7a60d0ca6bacea7433a9be51691610639d1e0836c58c111269f.png 379KB
5631afe819c5cdbbc8f6161dace22a76248921f9aa17dc4d29db20ef63a71bb1.png 261KB
1182d175ac09f971bf3f0322c357e257eb31d7585eefcadb0efbb0f71149f548.png 239KB
1fd77987fd4fd3272e704a300abb285a59c421c8d7184734aa32ea299a3d26eb.png 230KB
图标.png 2KB
图标.png 2KB
main.py 9KB
ui_trie_ui.py 7KB
ui_trie_ui.py 7KB
ui_hash_ui.py 7KB
ui_hash_ui.py 7KB
ui_avl_ui.py 7KB
ui_avl_ui.py 7KB
avl.py 6KB
ui_main_ui.py 5KB
ui_main_ui.py 5KB
trie.py 2KB
hash.py 2KB
load_data.py 450B
ui_trie_ui.cpython-39.pyc 4KB
ui_hash_ui.cpython-39.pyc 4KB
ui_avl_ui.cpython-39.pyc 4KB
avl.cpython-39.pyc 4KB
ui_main_ui.cpython-39.pyc 3KB
tools.cpython-39.pyc 3KB
hash.cpython-39.pyc 2KB
trie.cpython-39.pyc 2KB
ui_untitled.cpython-39.pyc 2KB
load_data.cpython-39.pyc 563B
AllTestWord.txt 153KB
AllTestWord.txt 153KB
f.txt 9KB
f.txt 9KB
c.txt 9KB
c.txt 9KB
e.txt 8KB
e.txt 8KB
d.txt 8KB
d.txt 8KB
a.txt 8KB
a.txt 8KB
b.txt 7KB
b.txt 7KB
v.txt 6KB
v.txt 6KB
t.txt 6KB
t.txt 6KB
u.txt 6KB
u.txt 6KB
h.txt 6KB
h.txt 6KB
j.txt 6KB
j.txt 6KB
n.txt 6KB
n.txt 6KB
i.txt 6KB
i.txt 6KB
o.txt 6KB
o.txt 6KB
r.txt 6KB
r.txt 6KB
w.txt 6KB
w.txt 6KB
m.txt 6KB
m.txt 6KB
s.txt 5KB
s.txt 5KB
l.txt 5KB
l.txt 5KB
g.txt 5KB
g.txt 5KB
p.txt 5KB
p.txt 5KB
q.txt 5KB
q.txt 5KB
k.txt 4KB
k.txt 4KB
z.txt 4KB
z.txt 4KB
y.txt 4KB
y.txt 4KB
x.txt 1KB
x.txt 1KB
number.txt 168B
共 105 条
- 1
- 2
资源评论
好家伙VCC
- 粉丝: 2303
- 资源: 9142
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功