数据结构课程设计文档格式.docx

上传人:b****2 文档编号:3561947 上传时间:2023-05-02 格式:DOCX 页数:46 大小:283KB
下载 相关 举报
数据结构课程设计文档格式.docx_第1页
第1页 / 共46页
数据结构课程设计文档格式.docx_第2页
第2页 / 共46页
数据结构课程设计文档格式.docx_第3页
第3页 / 共46页
数据结构课程设计文档格式.docx_第4页
第4页 / 共46页
数据结构课程设计文档格式.docx_第5页
第5页 / 共46页
数据结构课程设计文档格式.docx_第6页
第6页 / 共46页
数据结构课程设计文档格式.docx_第7页
第7页 / 共46页
数据结构课程设计文档格式.docx_第8页
第8页 / 共46页
数据结构课程设计文档格式.docx_第9页
第9页 / 共46页
数据结构课程设计文档格式.docx_第10页
第10页 / 共46页
数据结构课程设计文档格式.docx_第11页
第11页 / 共46页
数据结构课程设计文档格式.docx_第12页
第12页 / 共46页
数据结构课程设计文档格式.docx_第13页
第13页 / 共46页
数据结构课程设计文档格式.docx_第14页
第14页 / 共46页
数据结构课程设计文档格式.docx_第15页
第15页 / 共46页
数据结构课程设计文档格式.docx_第16页
第16页 / 共46页
数据结构课程设计文档格式.docx_第17页
第17页 / 共46页
数据结构课程设计文档格式.docx_第18页
第18页 / 共46页
数据结构课程设计文档格式.docx_第19页
第19页 / 共46页
数据结构课程设计文档格式.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计文档格式.docx

《数据结构课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计文档格式.docx(46页珍藏版)》请在冰点文库上搜索。

数据结构课程设计文档格式.docx

2若p->

data<

data,说明B中无此值,处理表A中的下一个结点。

3若p->

data==q->

data,说明找到了公共元素。

同理,求并运算时,只需对单链表B中的每一个元素x,在单链表A中进行查找,若存在和x不相同的元素,则将该结点插入单链表A中。

求差运算时,只需对单链表B中的每个元素x,在单链表A中查找,若存在与x相同的结点,则将该结点从单链表A中删除。

(四)详细设计

#ifndefLinkList_H

#defineLinkList_H

template<

classDataType>

structNode

{DataTypedata;

Node<

*next;

};

classLinkList

{

public:

LinkList();

~LinkList();

*first;

};

#endif

#include<

iostream>

usingnamespacestd;

#include"

LinkList.h"

LinkList<

:

LinkList()

{first=newNode<

;

first->

next=NULL;

}

LinkList(DataTypea[],intn)

*r,*s;

first=newNode<

r=first;

for(inti=0;

i<

n;

i++)

{s=newNode<

s->

data=a[i];

r->

next=s;

r=s;

}

~LinkList()

*q=NULL;

while(first!

=NULL)

{q=first;

first=first->

next;

deleteq;

}

template<

voidLinkList<

PrintList()

*p=first->

while(p!

{cout<

<

p->

"

"

p=p->

cout<

endl;

//要查找单链表A和单链表B中相同的元素并保留在单链表A中。

voidjiaoji(Node<

*B)//交运算

*pre,*p,*q;

pre=A;

p=A->

q=B->

=NULL&

&

q!

{

if(p->

data)

{pre->

next=p->

deletep;

p=pre->

elseif(p->

data)q=q->

else{p=p->

q=q->

pre=pre->

}

//对单链表B中的每个元素x,在单链表A中查找,若存在与x相同的结点,则将该结点从单链表A中删除。

voidchaji(Node<

*B)//A-B

*pre,*p,*q;

q=B->

=NULL&

q!

if(p->

{p=p->

pre=pre->

}//始终保证p=pre->

}

//对单链表B中的每一个元素x,在单链表A中进行查找,若存在和x不相同的元素,则将该结点插入单链表A中

voidbingji(Node<

*B)

*s=NULL;

data=q->

data;

next=pre->

//p=pre->

pre->

pre=s;

}

data)//p=pre->

p=p->

pre=pre->

if(p==NULL&

=NULL){pre->

next=q;

p=q;

if(p==NULL&

}

voidInsertSort(charr[],intn)

for(inti=1;

r[n]=r[i];

//设置哨兵

for(intj=i-1;

r[n]<

r[j]&

j>

=0;

j--)

{r[j+1]=r[j];

r[j+1]=r[n];

#include<

cstring>

cmath>

#include"

LinkList.cpp"

voidmain()

注意,输入的字符串必须为小写字母,且不出现重复字母!

charr1[100],r2[100];

请输入字符串:

cin.getline(r1,100);

cin.getline(r2,100)

intk1=strlen(r1);

intk2=strlen(r2);

InsertSort(r1,k1+1);

InsertSort(r2,k2+1);

LinkList<

char>

L1(r1,k1+1);

//尾插法LinkList<

L2(r2,k2+1);

cout<

输出:

建立有序链表:

L1.PrintList();

L2.PrintList();

1.交集."

2.并集."

3.差集."

请选择:

intchoice;

cin>

>

choice;

if(choice>

0&

choice<

4)

switch(choice)

case1:

交运算:

jiaoji(L1.first,L2.first);

L1.PrintList();

break;

case2:

并运算"

bingji(L1.first,L2.first);

case3:

差运算"

chaji(L1.first,L2.first);

2、病人就医管理

【问题描述】病人到医院看病,排队看医生的情况,在病人排队过程中,主要发生两件事:

(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。

(2)护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。

试为医院编制按上述要求进行管理的模拟程序。

【基本要求】程序采用菜单方式,其选项及功能说明如下:

(1)排队------输入病人的病历号,加入到病人排队队列中

(2)就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。

(3)查看排队------从队首到队尾列出所有的排队病人的病历号。

(4) 

下班---------退出运行。

patient();

//无参构造函数

patient(char*num);

//带参构造函数

patient(constpatient&

per);

//拷贝构造函数

~patient();

//折构函数

voiddisplay();

//显示病人病历

voidinput();

//输入病人病历

注意点:

在做第二题病人就医管理时,我采用的数据结构是队列,利用其先进先出的特性,病人取病历号时进队,就诊时出队。

判断对空的条件是front==rear.

string>

classpatient//定义病人这一个类

{//病历号

public:

char*number;

//带参构造函数patient(constpatient&

//拷贝构造函数

//折构函数voiddisplay();

//显示病人病历

//输入病人病

patient:

patient()

{number=NULL;

}

patient(char*num)

if(num)

number=newchar[strlen(num)+1];

//避免浅拷贝,将病历号拷贝

strcpy(number,num);

per)//拷贝构造函数

if(per.number)

number=newchar[strlen(per.number)+1];

strcpy(number,per.number);

~patient()//折构函数

{if(number)delete[]number;

}

voidpatient:

display()//输出病人病历号

{cout<

病历号:

number<

input()//输入病人病历号

charnum[10];

输入病历号:

num;

if(number)delete[]number;

number=newchar[strlen(num)+1];

strcpy(number,num);

constintN=10;

voidOutput(patient*a);

//出队voidInput(patient*a);

//入队

intjiuzhen(patient*a);

intchakanpaidui(patient*a);

voidend(patient*a);

intfront=0,rear=1,z=10;

voidInput(patient*a)

a[front].input();

front++;

z--;

cout<

还有"

(z)<

名排队等待名额"

intjiuzhen(patient*a)

if(rear<

=front)

请"

a[rear-1].number<

号病人现在就诊。

rear++;

z++;

//有人就诊,增加一排队名额

排队等待名额"

Elsecout<

现在没有病人救诊!

return0;

intchakanpaidui(patient*a)

if(rear==front+1)

现在没有病人排队!

else

正在排队中的病人:

for(inti=rear-1;

front;

a[i].display();

intend()

if(rear==front+1)//队空

可以下班了!

return0;

还有病人,不可以下班!

return1;

intmain()

patienta[N];

//定义病人数组

//读入选项

病人就医管理"

你好,欢迎登陆病人管理系统!

1.排队--输入病人的病历号,加入到病人的排队队列中。

2.就诊--病人排队队列中最前面的病人就诊,并将其从队列中删除。

3.参看排队--从队首到队尾列出所有的排队病人的病历号。

4.下班?

5.结束调试。

医院排队区仅限10人"

do

cin>

if(choice>

=5)

switch(choice)

{

case1:

Input(a);

break;

case2:

jiuzhen(a);

case3:

chakanpaidui(a);

case4:

end();

}

else

cout<

输入错误,请重新输入!

endl<

}while(choice!

=5);

3、校园导游咨询

【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。

【基本要求】

(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;

以边表示路径,存放路径长度等相关信息。

(2)为来访客人提供图中任意景点相关信息的查询。

(3)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。

Grahp(inte[vertexNum][vertexNum],intv[vertexNum]);

//初始化图的邻接矩阵

intshortest_way(ints,intd);

//求最短路径

intBFS(ints,intd);

//广度优先算法

第三题校园导游咨询用到了图结构,这一题蛮有难度的,这一题我采用了邻接矩阵存储各顶点,在查找最小路径时,我使用了Dijkstra算法,辅助数组dist[n];

元素dist[n]表示当前所找到的从源点v到终点vi的最短路径长度。

辅助数组path[n]:

元素path[i]是一个串,表示当前所找到的从源点v到终点vi的最短路径。

数组s[n]:

存放源点和已生成的终点,初始态只有一个源点v.我采用的基本思路是:

1.初始化数组dist,path和s;

2.While(s中元素个数<

n)

2.1在dist[n]中求最小值,其编号为k;

2.2输出dist[k]和path[k];

2.3修改数组dist和path;

2.4将顶点k添加到数组s中;

constintvertexNum=10;

constintMAX=10000;

//表示大于所有边上权值的数

intdefault_e[vertexNum][vertexNum]={0,100,150,MAX,100,400,MAX,MAX,MAX,MAX,

100,0,MAX,MAX,MAX,MAX,MAX,MAX,MAX,400,

150,MAX,0,100,MAX,MAX,50,MAX,MAX,MAX,

MAX,MAX,100,0,MAX,MAX,MAX,200,100,200,

100,MAX,MAX,MAX,0,250,MAX,MAX,MAX,MAX,

400,MAX,MAX,MAX,250,0,100,300,MAX,MAX,

MAX,MAX,50,MAX,MAX,100,0,MAX,MAX,MAX,

MAX,MAX,MAX,200,MAX,300,MAX,0,150,MAX,

MAX,MAX,MAX,100,MAX,MAX,MAX,150,0,150,

MAX,400,MAX,200,MAX,MAX,MAX,MAX,150,0};

//初始化邻接矩阵10*10

intdefault_v[vertexNum]={0,1,2,3,4,5,6,7,8,9};

/************定义景点结构体**********/

structview_spot_node

charname[vertexNum];

intcodename;

//代号

view_spot_nodeoperator=(view_spot_node&

v)//重载等号运算符,形参是一个view_spot_node结构体类型的引用

codename=v.codename;

vertexNum;

name[i]=v.name[i];

returnv;

/********输入代号及景点名字*********/

view_spot_nodedefault_vsn[vertexNum]={"

景点A"

1,"

景点B"

2,"

景点C"

3,"

景点D"

4,"

景点E"

5,"

景点F"

6,"

景点G"

7,"

景点H"

8,"

景点I"

9,"

景点J"

10};

/*************图结构***********/

classGrahp

Grahp(inte[vertexNum][vertexNum],intv[vertexNum]=default_v);

//定义边和结点(首地址)

intshortest_way(ints,intd);

//求最短路径intstore_v[vertexNum];

//存储结点

intdistance[vertexNum];

//声明距离的数组

private:

intBFS(ints,intd);

//广度优先算法voidstore(intd);

intedge[vertexNum][vertexNum];

//存储边intvertex[vertexNum];

//顶点数组

intvisited[vertexNum];

//将为访问的顶点的值设置为0,已访问的顶点的

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2