1 / 41
文档名称:

数据结构大型实验报告技术总结.docx

格式:docx   大小:1,692KB   页数:41页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构大型实验报告技术总结.docx

上传人:s0012230 2017/4/26 文件大小:1.65 MB

下载得到文件列表

数据结构大型实验报告技术总结.docx

相关文档

文档介绍

文档介绍:数据结构大型实验——用户登录系统 1 数据结构大型实验——用户登录系统姓名: *** 学号: *** 班级: *** 浙江工业大学计算机学院完成时间: 数据结构大型实验——用户登录系统 2 一、实验内容分析 【问题描述】在登录服务器系统时, 都需要验证用户名和密码,如 远程登录服务器。用户输入用户名和密码后, 服务器程序会首先验证用户信息的合法性。由于用户信息的验证频率很高, 系统有必要有效地组织这些用户信息, 从而快速查找和验证用户。另外, 系统也会经常会添加新用户、删除老用户和更新用户密码等操作,因此,系统必须采用动态结构,在添加、删除或更新后, 依然能保证验证过程的快速。请采用相应的数据结构模拟用户登录系统, 其功能要求包括用户登录、用户密码更新、用户添加和用户删除等。【基本要求】 1. 要求自己编程实现二叉树结构及其相关功能,以存储用户信息, 不允许使用标准模板类的二叉树结构和函数。同时要求根据二叉树的变化情况, 进行相应的平衡操作, 即 AVL 平衡树操作, 四种平衡操作都必须考虑。测试时,各种情况都需要测试,并附上测试截图; 2. 要求采用类的设计思路,不允许出现类以外的函数定义,但允许友元函数。主函数中只能出现类的成员函数的调用,不允许出现对其它函数的调用。 3. 要求采用多文件方式: .h 文件存储类的声明, .cpp 文件存储类的实现, 主函数 mai n 存储在另外一个单独的 cpp 文件中。如果采用类模板, 文件中。 4. 要求源程序中有相应注释; 5. 不强制要求采用类模板,也不要求采用可视化窗口; 6. 要求测试例子要比较详尽, 各种极限情况也要考虑到, 测试的输出信息要详细易懂, 表明各个功能的执行正确; 7. 要求采用 Visual C++ 及以上版本进行调试; (AVL) 来存储用户信息,通过在插入和删除节点时左平衡和右平衡操作能使树始终保持平衡。以下为实验中涉及到的类。类名称成员变量及成员函数 UserNode ( 用户信息类) private: string name; // 用户名 string password; // 密码 int h; // 以该节点为根的子树高度 int bf; // 平衡因子:左树高度减去右树高度 UserNode *left; // 指向左子树的指针 UserNode *right; // 指向右子树的指针 UserNode *parent; // 指向父亲节点的指针 public: friend class AVL; UserNode(); UserNode(string n="",string p=""); 数据结构大型实验——用户登录系统 3 int Lh(); // 左子树高度 int Rh(); // 右子树高度 void geth(); // 更新以当前节点为根结点的子树高度 void getbf(); // 更新当前节点的平衡因子 string getpswd(); // 获取密码 void setpswd(string); // 修改密码 friend void save(UserNode*,ostream&); // 输出数据 AVL ( 功能类) private: UserNode *root; public: AVL():root(NULL){} // 构造函数 bool empty() const; // 判空 UserNode* find(string item); // 查找节点 void LRotate(UserNode*,UserNode*); // 左旋 void RRotate(UserNode*,UserNode*); // 右旋 void LRRotate(UserNode*,UserNode*,UserNode*);// 左右旋 void RLRotate(UserNode*,UserNode*,UserNode*);// 右左旋 void update(UserNode*); // 调整平衡 void insert(string,string); // 插入节点 bool Delete(UserNode*); // 删除节点 void printNode(UserNode* ,int ); // 打印一个节点 void print(); // 打印树 friend istream& operator >> (istream&,AVL&); // 输入文件 friend ostream& operator << (ostream&,AVL&); // 输出文件 Menu ( 界面菜单类) private: AVL us