(完整word版)数据结构课程设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计题目:一
单位员工通讯录管理系统
一、题目要求
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。二、概要设计
本程序通过建立通讯录链表,对员工信息进行记录,并建立一个系统的联系。
三、主要代码及分析
这里面关于链表的主要的操作有插入,查询,删除。则这里只列出这几项的主代码。
1、通过建立通讯录结构体,对信息进行存储,建立链表,建立信息之间
的联系。
typedef struct { }DataType;结构体来存储通讯录中的基本信息
typedef struct node
{ DataType data; /*结点的数据域*/
struct node *next; /*结点的指针域*/
}ListNode,*LinkList;
2、信息插入操作,将信息查到链表的后面。
void ListInsert(LinkList list){ //信息插入
ListNode *w;
w=list->next;
while(w->next!=NULL)
{ w=w->next; }
ListNode *u=new ListNode;
u->next=NULL;
cout<<"员工编号:";cin>>u->data.num;
cout<<"员工姓名:";cin>>u->;
cout<<"手机号码:";cin>>u->data.call;
cout<<"员工邮箱:";cin>>u->data.email;
cout<<"办公室电话号码:";cin>>u->data.phone;
w->next=u;w=w->next;
}
3、信息删除操作
void ListDelete(LinkList list){ //删除
ListNode *c1;
ListNode *c2;
ListNode *c3;
c1=list;
c2=list;
int s=0;
char Schax[20];
cout<<"-------------------------------------------------------"< cout<<"请输入要删除的员工编号:"; cin>>Schax; while((strcmp(Schax,c1->data.num))) {s++; c1=c1->next; } for(int j=0;j { c2=c2->next; } c3=c2->next; c2->next=c3->next; } 4、查询 void Traverse(LinkList list){ //查询 ListNode *s; s=list->next; int a=0; cout<<"按员工编号查询,请输入员工编号:"; char num[20]; cin>>num; do{ if(!(strcmp(num,s->data.num)))//Q=H,strcmp(Q,H) ==0;Q>H, strcmp(Q,H) == 1;Q { cout<<"员工编号:"< cout<<"员工姓名:"< cout<<"手机号码:"< cout<<"员工邮箱:"< cout<<"办公室电话号码:"< return; a++; } } while(s->next!=NULL,s=s->next); if (a==0) {cout<<"小凤温馨提示~~~~~~您输入的信息不存在!"< 四、运行结果及分析 插入操作及其结果 查询 修改 (修改结果) 删除 五、设计心得体会 通过这次设计,又温习了一下链表的基本操作,对链表的增删改查的基本内容都有了一定的掌握,为以后的编程打好了基础。 设计题目:二 线索二叉树 一、题目要求 1.建立中序线索二叉树,并且中序遍历; 2. 求中序线索二叉树上已知结点中序的前驱和后继; 本程序通过建立通讯录链表,对员工信息进行记录,并建立一个系统 的联系。 二、概要设计 这个是对线索二叉树的编程,首先要熟悉掌握线索二叉树的基本原理,在n个结点的二叉链表中含有n+1个空指针。因为含n个结点的二叉链表中含有2n个指针,除了根结点,每个结点都有一个从父结点指向该结点的指针,因此一共使用了n-1个指针,所以在n个结点的二叉链表中含有2n-(n-1)=n+1个空指针。 因此,可以利用这些空指针,存放指向结点在某种遍历次序下的前 驱和后继结点的指针。这种附加的指针称为线索,加上了线索的二叉链 表称为线索链表,相应的二叉树称为线索二叉树。为了区分一个结点的 指针是指向其孩子的指针,还是指向其前驱或后继结点的线索,可在每 个结点中增加两个线索标志。 三、主要代码及分析 1、建立二叉树 int CreatBiTree(Bitree &T)//先序创建二叉树 { //该节点非空返回1,双亲节点对应标志Link, //空时返回0,双亲节点对应标志应为Thread TElemType ch; cin>>ch; if(ch=='#') { T=NULL; return 0; } else {if(!(T=(BitNode *)malloc(sizeof(BitNode)))) { cout<<"存储分配失败"< T->data=ch; if(CreatBiTree(T->lchild)) T->LTag=Link; else T->LTag=Thread; if(CreatBiTree(T->rchild)) T->RTag=Link; else T->RTag=Thread; } return 1; } 2、中序线索遍历二叉树。