教学计划数据结构课程设计说明书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中北大学

数据结构

课程设计说明书

20XX年12月20日

1设计目的

《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:

1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

…………………………..

2.设计内容和要求

设计内容:

(1) 设定专业开设课程(不少于30门,可参考本专业课程计划),及课程之间的依赖关系(如离散数学应在数据结构之前开设)。

(2)制定课程安排计划,并满足各学期课程数目大致相同。

设计要求:

(1) 符合课题要求,实现相应功能;

(2) 要求界面友好美观,操作方便易行;

(3) 注意程序的实用性、安全性;

…………………………

3.本设计所采用的数据结构

邻接表存储图结构,拓扑排序实现课程的先修依赖关系

……………………….

4.功能模块详细设计

4.1详细设计思想

1.程序主要包括五个模块

1)、图的邻接表的存储表示,即结构体的定义

typedef char VertexType[MAX_NAME];

typedef struct ArcNode

{

int adjvex; // 该弧所指向的顶点的位置

struct ArcNode *nextarc; //指向下一条弧的指针}ArcNode; // 链表结点

typedef struct //链接表

{

VertexType data; //顶点信息

int grades; //存储学分信息

ArcNode *firstarc; //指向第一条依附该顶点的弧的指针}VNode, AdjList[MAX_VERTEX_NUM]; // 头结点

typedef struct

{

AdjList vertices; //vertices 存储课程名

int vexnum, arcnum; // 图的当前顶点数和边数}ALGraph;

2)、利用前插法,建立图的邻接链表

printf("请输入下列课程的先修课程(无先修课程输入0结束后也输入0)\n");

for (k=0;k

{

printf("%s的先修课程:",G.vertices[k].data);

scanf("%s",va);

while (va[0]!='0')

{

i = LocateVex(G, va);//弧头

j = k; //弧尾

p = (ArcNode*)malloc(sizeof(ArcNode));

p->adjvex = j;

p->nextarc = G.vertices[i].firstarc; // 插在表头

G.vertices[i].firstarc = p;

scanf("%s",va);

}

}

3)、输出图的顶点和边

printf("%d个顶点", G.vexnum);

for (i = 0;i < G.vexnum;++i)

printf("%4s", G.vertices[i].data);

printf(" \n%d条弧边:\n",G.arcnum);

for (i = 0;i < G.vexnum;i++)

{

p = G.vertices[i].firstarc;

while (p)

{

printf("%s--->%s\n",G.vertices[i].data,G.vertices[p->adjvex].data);

p = p->nextarc;

}

}

4)、通过栈实现拓扑排序

FindInDegree(G, indegree); // 对各顶点求入度

InitStack(S); // 初始化栈

for (i = 0;i < G.vexnum;++i) //建零入度顶点栈S

if (!indegree[i]) Push(S, i); // 入度为0者进栈

count = 0; // 对输出顶点计数

while (!StackEmpty(S))

{

Pop(S, i);

printf("%s(%d分),",G.vertices[i].data,G.vertices[i].grades);

Temp[j++] = G.vertices[i]; //将当前的拓扑序列保存起来

++count; // 输出i号顶点并计数

for (p =G.vertices[i].firstarc; p; p=p->nextarc)// 对i号顶点的每个邻接点的入度减1

{

k = p->adjvex;

if (!(--indegree[k])) // 若入度减为0,则入栈

Push(S, k);

}

}

if (count < G.vexnum)

{

printf("此有向图有回路无法完成拓扑排序");

return ERROR;

}

else printf( " 为一个拓扑序列");

printf("\n");

Return OK

Return ERROR

相关文档
最新文档