Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
Lab018
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
DS Lab Group
实验项目模板
Lab018
提交
609d75ca
提交
609d75ca
5月 20, 2019
创建
作者:
宋海霞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify
上级
c330bb52
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
67 行增加
和
67 行删除
+67
-67
Stack.c
Stack.c
+29
-29
main.c
main.c
+38
-38
没有找到文件。
Stack.c
浏览文件 @
609d75ca
...
...
@@ -2,11 +2,11 @@
/*
功能:
初始化栈。
function:
Initialize the stack.
参数:
pS --
栈的指针
parameter:
pS --
The stack pointer
*/
void
InitStack
(
Stack
*
pS
)
{
...
...
@@ -14,47 +14,47 @@ void InitStack(Stack* pS)
}
/*
功能:
将元素入栈。
function:
Push elements on the stack.
参数:
pS --
栈的指针
Elem --
入栈的元素
parameter:
pS --
The stack pointer
Elem --
Pushed elements
返回值:
如果插入成功返回入栈元素的值。
如果插入失败返回 -1。
returned value:
Returns the value of the pushed element if the insert succeeds.
Returns -1 if insert fails.
*/
int
Push
(
Stack
*
pS
,
int
Elem
)
{
//
//
栈满,入栈失败。
//
Stack full, push failed.
//
if
(
MAX_STACK_LENGTH
-
1
<
pS
->
top
)
return
-
1
;
pS
->
top
++
;
pS
->
buffer
[
pS
->
top
]
=
Elem
;
//
将元素插入栈顶
pS
->
buffer
[
pS
->
top
]
=
Elem
;
//
Insert the element at the top of the stack
return
Elem
;
}
/*
功能:
将栈顶元素出栈
function:
Pop the top element of the stack
参数:
pS --
栈的指针
parameter:
pS --
The stack pointer
返回值:
如果出栈成功返回出栈元素的值。
如果出栈失败返回 -1。
returned value:
If the pop succeeds, the value of the pop element is returned.
Returns -1 if pop fails.
*/
int
Pop
(
Stack
*
pS
)
{
int
Elem
;
//
//
栈为空,出栈失败
//
The stack is empty and the pop fails
//
if
(
StackEmpty
(
pS
))
return
-
1
;
...
...
@@ -66,15 +66,15 @@ int Pop(Stack* pS)
}
/*
功能:
判断栈是否为空。
function:
Determines whether the stack is empty.
参数:
pQ --
栈的指针
parameter:
pQ --
The stack pointer
返回值:
如果栈空返回 1(真)
如果栈非空返回 0(假)
returned value:
Returns 1 if stack is empty.
Returns 0 if the stack is not empty.
*/
int
StackEmpty
(
Stack
*
pS
)
{
...
...
main.c
浏览文件 @
609d75ca
...
...
@@ -14,7 +14,7 @@ int main(int argc, char* argv[])
InitGraph
(
&
GraphList
);
//
//
调用 InitStack 函数初始化栈
//
Call the InitStack function to initialize the stack
//
InitStack
(
&
stack
);
InitStack
(
&
TopoSortResult
);
...
...
@@ -26,7 +26,7 @@ int main(int argc, char* argv[])
//
//
输出结果
//
output result
//
OutputResult
(
&
GraphList
);
...
...
@@ -40,10 +40,10 @@ int main(int argc, char* argv[])
}
/*
功能:
function:
求图中所有顶点的入度
参数:
parameter:
pGraphList -- 图指针
*/
...
...
@@ -51,20 +51,20 @@ void FindInDegree(GraphList *pGraphList)
{
//
// TODO:
在此添加代码
// TODO:
Add the code here
//
}
/*
功能:
拓扑排序
。
将排序结果(顶点下标)压入栈 TopoSortResult 中
function:
拓扑排序
.
将排序结果(顶点下标)压入栈 TopoSortResult 中
并计算事件最早发生时间的数组
参数:
parameter:
pGraphList -- 图指针
返回值:
returned value:
如果排序成功返回 1
如果排序失败返回 0
*/
...
...
@@ -73,27 +73,27 @@ int TopologicalSort(GraphList* pGraphList)
FindInDegree
(
pGraphList
);
// 求图中所有顶点的入度
//
// TODO:
在此添加代码
// TODO:
Add the code here
//
return
0
;
}
/*
功能:
function:
关键路径
参数:
parameter:
pGraphList -- 图指针
返回值:
returned value:
如果计算关键路径成功返回 1
如果计算关键路径失败返回 0
*/
int
CriticalPath
(
GraphList
*
pGraphList
)
{
EdgeNode
*
pEdgeNode
;
// 边(弧
)
节点指针
int
i
,
k
;
//
游标
EdgeNode
*
pEdgeNode
;
// 边(弧节点指针
int
i
,
k
;
//
The cursor
int
ee
,
el
;
// 临时变量
TopologicalSort
(
pGraphList
);
// 拓扑排序
...
...
@@ -105,27 +105,27 @@ int CriticalPath(GraphList* pGraphList)
Vl
[
i
]
=
Ve
[
pGraphList
->
length
-
1
];
//
// TODO:
在此添加代码
// TODO:
Add the code here
//
return
0
;
}
/*
功能:
function:
使用给定的数据初始化图的邻接表
参数:
parameter:
pGraphList -- 图指针
*/
typedef
struct
Arc
{
int
Weight
;
// 权值
。
int
VexIndex
;
// 与该顶点邻接的顶点序列
。
const
char
*
Name
;
// 边(弧
)
活动名称
int
Weight
;
// 权值
.
int
VexIndex
;
// 与该顶点邻接的顶点序列
.
const
char
*
Name
;
// 边(弧活动名称
}
Arc
;
typedef
struct
VertexArrayEntry
{
const
char
*
Name
;
// 顶点名称
。NULL 表示顶点序列结束。
Arc
ArcArray
[
MAX_VERTEX_NUM
];
// 边节点数组
。
const
char
*
Name
;
// 顶点名称
.NULL 表示顶点序列结束.
Arc
ArcArray
[
MAX_VERTEX_NUM
];
// 边节点数组
.
}
VertexArrayEntry
;
const
VertexArrayEntry
VertexArray
[]
=
{
...
...
@@ -142,16 +142,16 @@ const VertexArrayEntry VertexArray[] =
};
/*
功能:
function:
初始化图
参数:
parameter:
pGraphList -- 图指针
*/
void
InitGraph
(
GraphList
*
pGraphList
)
{
int
i
,
j
;
//
游标
EdgeNode
**
pEdgeNodePtr
;
// 指向边(弧
)
节点指针的指针
int
i
,
j
;
//
The cursor
EdgeNode
**
pEdgeNodePtr
;
// 指向边(弧节点指针的指针
//
// 重置图中的数据 length
...
...
@@ -163,12 +163,12 @@ void InitGraph(GraphList* pGraphList)
//
for
(
i
=
0
;
i
<
MAX_VERTEX_NUM
;
i
++
)
{
if
(
NULL
==
VertexArray
[
i
].
Name
)
// 顶点名称
。NULL表示顶点序列结束。
if
(
NULL
==
VertexArray
[
i
].
Name
)
// 顶点名称
.NULL表示顶点序列结束.
break
;
pGraphList
->
vexlist
[
i
].
name
=
VertexArray
[
i
].
Name
;
pEdgeNodePtr
=
&
pGraphList
->
vexlist
[
i
].
firstarc
;
// 使指针指向顶点数组的第一条边(初始化指针的位置
)
pEdgeNodePtr
=
&
pGraphList
->
vexlist
[
i
].
firstarc
;
// 使指针指向顶点数组的第一条边(初始化指针的位置
for
(
j
=
0
;
j
<
MAX_VERTEX_NUM
;
j
++
)
{
if
(
NULL
==
VertexArray
[
i
].
ArcArray
[
j
].
Name
)
...
...
@@ -190,10 +190,10 @@ void InitGraph(GraphList* pGraphList)
}
/*
功能:
function:
销毁图
参数:
parameter:
pGraphList -- 图指针
*/
void
DeleteGraph
(
GraphList
*
pGraphList
)
...
...
@@ -215,15 +215,15 @@ void DeleteGraph(GraphList* pGraphList)
}
/*
功能:
输出结果
function:
output result
参数:
无
parameter:
nothing
*/
void
OutputResult
(
GraphList
*
pGraphList
)
{
EdgeNode
*
pEdgeNode
;
// 边(弧
)
节点指针
EdgeNode
*
pEdgeNode
;
// 边(弧节点指针
int
i
,
k
;
// 下标
int
ee
,
el
;
// 临时变量
...
...
@@ -256,13 +256,13 @@ void OutputResult(GraphList* pGraphList)
for
(
pEdgeNode
=
pGraphList
->
vexlist
[
i
].
firstarc
;
pEdgeNode
!=
NULL
;
pEdgeNode
=
pEdgeNode
->
nextedge
)
{
//
// 将边(弧
)
节点指针指向的顶点下标保存到 k 中
// 将边(弧节点指针指向的顶点下标保存到 k 中
//
k
=
pEdgeNode
->
vertex
;
//
// ee 保存 Ve[i] 的值
,
le 保存 Vl[k] 值并减去边节点指针对应的权值
// ee 保存 Ve[i] 的值
,
le 保存 Vl[k] 值并减去边节点指针对应的权值
//
ee
=
Ve
[
i
];
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论