基于平衡二叉树实现的用户登入系统
在登录服务器系统时,都需要验证用户名和密码,如telnet远程登录服务器。用户输入用户名和密码后,服务器程序会首先验证用户信息的合法性。由于用户信息的验证频率很高,系统有必要有效地组织这些用户信息,从而快速查找和验证用户。另外,系统也会经常会添加新用户、删除老用户和更新用户密码等操作,因此,系统必须采用动态结构,在添加、删除或更新后,依然能保证验证过程的快速。请采用相应的数据结构模拟用户登录系统,其功能要求包括用户登录、用户密码更新、用户添加和用户删除等。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6544 2019-01-10 11:31 用户登入系统AvlTree.cpp
文件 1630 2019-01-05 11:27 用户登入系统AvlTree.h
文件 257795 2019-01-10 11:31 用户登入系统AvlTree.o
文件 12517 2019-01-10 10:31 用户登入系统Interface.cpp
文件 986 2019-01-05 07:44 用户登入系统Interface.h
文件 972863 2019-01-10 10:31 用户登入系统Interface.o
文件 159 2019-01-05 08:52 用户登入系统main.cpp
文件 934751 2019-01-10 10:31 用户登入系统main.o
文件 1328 2019-01-10 11:31 用户登入系统Makefile.win
文件 147 2019-01-10 11:34 用户登入系统Test.txt
文件 1085 2019-01-05 08:56 用户登入系统UserInfo.cpp
文件 862 2019-01-05 10:42 用户登入系统UserInfo.h
文件 86518 2019-01-10 10:31 用户登入系统UserInfo.o
..A..H. 162 2019-04-07 22:04 用户登入系统~$登入系统实验报告.docx
文件 1624 2019-01-10 11:34 用户登入系统项目1.dev
文件 4010017 2019-01-10 11:31 用户登入系统项目1.exe
文件 418 2019-01-10 11:34 用户登入系统项目1.layout
目录 0 2019-04-07 22:18 用户登入系统
文件 1811089 2019-04-07 22:04 用户登入系统用户登入系统实验报告.docx
----------- --------- ---------- ----- ----
8100495 19
#include“AvlTree.h“
#include
using namespace std;
void AvlTree::PreOrderTraversal(AvlNode* BT){
if(BT){
cout<val.id()<<“ “<val.pw()<<‘ ‘;
PreOrderTraversal(BT->left);
PreOrderTraversal(BT->right);
}
}
void AvlTree::InOrderTraversal(AvlNode*BT){
if(BT){
InOrderTraversal(BT->left);
cout<val.id()<<“ “<val.pw()<<‘ ‘;
InOrderTraversal(BT->right);
}
}
void AvlTree::PostOrderTraversal(AvlNode*BT){
if(BT){
PostOrderTraversal(BT->left);
PostOrderTraversal(BT->right);
cout<val.id()<<“ “<val.pw()<<‘ ‘;
}
}
void AvlTree::LevelOrder()
{
queue q;//建立队列q
AvlNode*front;
if (root == NULL)return;//如果树空,则不进行操作
q.push(root);//将根节点压入队列
while (!q.empty())//循环直到队列空
{
front = q.front();
q.pop();//弹出队列的队顶元素
if (front->left)//如果节点有左儿子,则把左儿子压入队列末端
q.push(front->left);
if (front->right)//如果节点有右儿子,则把右儿子压入队列末端
q.push(front->right);
cout<val.id()<<“ “<val.pw()<<‘ ‘;
}
}
AvlNode * AvlTree::Empty(AvlNode * cur)//删除树
{
if(cur==NULL) return NULL;//如果树空,则返回NULL
Empty(cur->left);//递归删除
Empty(cur->right);//递归删除
free(cur);//释放节点
return NULL;
}
inline int AvlTree::Height(AvlNode * cur)//计算高度
{
if(cur==NULL) return 0;
return cur->height;//获得树高
}
AvlNode* AvlTree::LLchange(AvlNode * cur) //LL旋转操作
{
AvlNode * temp=cur->left;
cur->left=temp->right;
temp->right=cur;
cur->height=max(Height(cur->left)Height(cur->right))+1;
temp->height=max(Height(temp->left)Height(temp->right))+1;
return temp;
}
AvlNode* AvlTree::RRchange(AvlNode* cur)//RR旋转操作
{
AvlNode * temp=cur->right;
cur->right=temp->left;
temp->left=cur;
cur->height=max(Height(cur->left)Height(cur->right))+1;
temp->height=max(Height(temp->left)Height(temp->right))+1;
return temp;
}
AvlNode* AvlTree::LRchange(AvlNode* cur) //LR旋转操左
{
cur->left=RRchange(cur->left);
return LLchange(cur);
}
AvlNode* AvlTree::RLchange(AvlNode * cur)
{
cur->right=LLchange(cur->right);
return RRchange(cur);
}
AvlNode* AvlTree::Insert(AvlNode * curUserInfo va)
{
if(cur==NULL) //如果到底了,那么创建新的节点
{
cur=new AvlNode(va);
return cur;
}
if(cur->val==va) return cur;//有相同的
if(cur->val>va)
{
cur->left=Insert(cur->leftva);//注意这里是cur->left= 请认真思考为什么这么写
if(Height(cur->left)-Height(cur->right)==2)//插入后看是否平衡,如果不平衡显然是插入的那一边高度大
{
if(valeft->val)//判断是LL还是LR即插入的是left节点的left 还是right
cur=LLchange(cur);
else
cur=LRchange(cur);
}
}
else//同理
{
cur->right=Insert(cur->rightva);
if(Height(cur->right)-Height(cur->left)==2)
{
if(va>cur->right->val)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6544 2019-01-10 11:31 用户登入系统AvlTree.cpp
文件 1630 2019-01-05 11:27 用户登入系统AvlTree.h
文件 257795 2019-01-10 11:31 用户登入系统AvlTree.o
文件 12517 2019-01-10 10:31 用户登入系统Interface.cpp
文件 986 2019-01-05 07:44 用户登入系统Interface.h
文件 972863 2019-01-10 10:31 用户登入系统Interface.o
文件 159 2019-01-05 08:52 用户登入系统main.cpp
文件 934751 2019-01-10 10:31 用户登入系统main.o
文件 1328 2019-01-10 11:31 用户登入系统Makefile.win
文件 147 2019-01-10 11:34 用户登入系统Test.txt
文件 1085 2019-01-05 08:56 用户登入系统UserInfo.cpp
文件 862 2019-01-05 10:42 用户登入系统UserInfo.h
文件 86518 2019-01-10 10:31 用户登入系统UserInfo.o
..A..H. 162 2019-04-07 22:04 用户登入系统~$登入系统实验报告.docx
文件 1624 2019-01-10 11:34 用户登入系统项目1.dev
文件 4010017 2019-01-10 11:31 用户登入系统项目1.exe
文件 418 2019-01-10 11:34 用户登入系统项目1.layout
目录 0 2019-04-07 22:18 用户登入系统
文件 1811089 2019-04-07 22:04 用户登入系统用户登入系统实验报告.docx
----------- --------- ---------- ----- ----
8100495 19
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)