(完整word版)数据结构课程设计实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<<"员工编号:"<data.num<

cout<<"员工姓名:"<<

cout<<"手机号码:"<data.call<

cout<<"员工邮箱:"<data.email<

cout<<"办公室电话号码:"<data.phone<

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、中序线索遍历二叉树。

相关文档
最新文档