资源简介
在登录服务器系统时,都需要验证用户名和密码,如telnet远程登录服务器。用户输入用户名和密码后,服务器程序会首先验证用户信息的合法性。由于用户信息的验证频率很高,系统有必要有效地组织这些用户信息,从而快速查找和验证用户。另外,系统也会经常会添加新用户、删除老用户和更新用户密码等操作,因此,系统必须采用动态结构,在添加、删除或更新后,依然能保证验证过程的快速。请采用相应的数据结构模拟用户登录系统,其功能要求包括用户登录、用户密码更新、用户添加和用户删除等。

代码片段和文件信息
#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
相关资源
- 联想扬天电脑用户手册
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 软件工程文档模板1可行性研究报告
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- SMAC用户详解手册
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
评论
共有 条评论