提交 bd862e59 创建 作者: 宋海霞's avatar 宋海霞

template

上级
流水线 #472 已失败 于阶段
/Debug
/Release
*.bak
image: "registry.cn-hangzhou.aliyuncs.com/engintime/ubuntu_16.04_cpp:latest"
stages:
- make
- case1
- teacher-check
variables:
TEMPLATE_REPO: "engintime/ds-lab/Project-Template/Lab007.git"
.codecode-runner: &codecode-runner
tags:
- ubuntu-16.04
- short-job
make:
stage: make
<<: *codecode-runner
script:
- make
- execscore.sh 40
only:
- master
case1:
stage: case1
<<: *codecode-runner
script:
- make
- ./app > user_output.txt
- diff output.txt user_output.txt -b -B -y -i --suppress-common-lines
- execscore.sh 100
only:
- master
teacher-check:
stage: teacher-check
<<: *codecode-runner
script:
- make
- ./app
- git clone ${CODECODE_PROTOCOL}gitlab-ci-token:${CI_JOB_TOKEN}@${CODECODE_DOMAIN}/${TEMPLATE_REPO} template
- diff template/.gitlab-ci.yml .gitlab-ci.yml -b -B -y -i --suppress-common-lines
- diff template/output.txt output.txt -b -B -y -i --suppress-common-lines
- fileidentity.sh
only:
- master
when: manual
allow_failure: false
#ifndef _DOUBLELINKLIST_H_
#define _DOUBLELINKLIST_H_
//
// 在此处包含 C 标准库头文件
//
#include <stdio.h>
//
// 在此处包含其他头文件
//
//
// 在此处定义数据结构
//
typedef int ElemType; // 链表中元素的类型
typedef struct DuLNode {
ElemType data; // 数据域
struct DuLNode* prior; // 前趋指针
struct DuLNode* next; // 后继指针
}DuLinkList;
//
// 在此处声明函数
//
int Delete(DuLinkList* pListHead, int i, ElemType* pElem);
#endif /* _DOUBLELINKLIST_H_ */
<?xml version="1.0" encoding="gb2312"?>
<OSLProject Version="1.00" Name="DoubleLinkList_Delete" SubjectID="cf4dda31-1275-49ef-9b0f-36a6eff372e4" ProjectTemplateID="748e0301-89ee-4b56-8ca7-b31eebe11c41">
<Configurations>
<Configuration Name="Debug">
<Tool Name="PreBuildEventTool"/>
<Tool Name="CustomBuildTool"/>
<Tool Name="GCCCompilerTool" PreprocessorDefinitions="_DEBUG" GenerateDebugInformation="-1"/>
<Tool Name="PreLinkEventTool"/>
<Tool Name="GCCLinkerTool" AdditionalDependencies="&quot;$(DSLInstallDir)Dump\lib\DoubleLinkList_Delete_Demo.o&quot;"/>
<Tool Name="PostBuildEventTool"/>
<VisualContext>
<WatchPoints>
<WatchPoint FunctionName="Delete" ObserverID="8341B78A-7ADE-4223-85D3-2E7F53F941BC">
</WatchPoint>
</WatchPoints>
</VisualContext>
</Configuration>
<Configuration Name="Release">
<Tool Name="PreBuildEventTool"/>
<Tool Name="CustomBuildTool"/>
<Tool Name="GCCCompilerTool" PreprocessorDefinitions="NDEBUG"/>
<Tool Name="PreLinkEventTool"/>
<Tool Name="GCCLinkerTool"/>
<Tool Name="PostBuildEventTool"/>
</Configuration>
</Configurations>
<Files>
<Filter Name="ͷļ" Filter="h;hpp;hxx">
<File RelativePath=".\DoubleLinkList.h">
</File>
</Filter>
<Filter Name="Դļ" Filter="cpp;c;cc;cxx">
<File RelativePath=".\main.c">
</File>
</Filter>
<File RelativePath=".\makefile">
</File>
<File RelativePath=".\output.txt">
</File>
<File RelativePath=".\readme.md">
</File>
</Files>
</OSLProject>
#include "DoubleLinkList.h"
int main(int argc, char* argv[])
{
int i;
ElemType Elem;
DuLinkList* pListHead; // 双向循环链表的表头指针,指向表头节点
DuLinkList* pListNode; // 双向循环链表节点指针
DuLinkList* pListHeadTemp;
//
// 初始化双向循环链表的表头节点
//
pListHead = (DuLinkList*)malloc(sizeof(DuLinkList));
pListHead->prior = pListHead;
pListHead->next = pListHead;
//
// 初始化双向循环链表的节点
//
for(i=8; i>0; i--)
{
pListNode = (DuLinkList*)malloc(sizeof(DuLinkList));
pListNode->data = i;
pListNode->next = pListHead->next;
pListNode->prior = pListHead;
pListHead->next->prior = pListNode;
pListHead->next = pListNode;
}
//
// 删除第 i 个节点
//
Delete(pListHead, 3, &Elem);
Delete(pListHead, 20, &Elem); // 删除位置非法。删除失败。
pListHeadTemp = pListHead;
pListNode = pListHeadTemp->next;
while(pListNode != pListHeadTemp)
{
printf("%d ", pListNode->data);
pListNode = pListNode->next;
}
printf("\n");
//
// 销毁双向循环链表
//
while(pListHead->next != pListHead)
{
pListNode = pListHead->next;
pListHead->next = pListNode->next;
pListNode->next->prior = pListHead;
free(pListNode);
}
free(pListHead);
return 0;
}
/*
功能:
删除第 i 个节点。
参数:
pListHead -- 双向循环链表的表头指针
i -- 删除节点的位置。从 1 开始计数。
pElem -- 返回被删除节点的值。
返回值:
如果删除成功返回 1
如果删除失败返回 0
*/
int Delete(DuLinkList* pListHead, int i, ElemType* pElem)
{
DuLinkList* pListNode; // 节点指针
//
// TODO: 在此添加代码
//
return 0;
}
app:main.o
gcc -o app main.o
main.o:main.c DoubleLinkList.h
gcc -c -w -O3 -std=c99 -fsigned-char main.c -o main.o
1 2 4 5 6 7 8
# 阅读实验源代码
**main.c文件**
在main函数中实现了双向循环链表的初始化,然后调用了两次双向循环链表的删除函数Delete,第一次调用删除成功,第二次调用删除失败,并在main函数的最后销毁了双向循环链表。
在main函数的后面,定义了双向循环链表的删除函数Delete,此函数的函数体还不完整,留给读者完成。
**DoubleLinkList.h文件**
定义了与双向循环链表相关的数据结构并声明了相关的操作函数。
# 在演示模式下调试项目
**按照下面的步骤调试项目:**
1. 按F7生成项目。
2. 在演示模式下,按F5启动调试项目。程序会在观察点函数的开始位置中断。
3. 重复按F5,直到调试过程结束。
在调试的过程中,每执行“演示流程”窗口中的一行后,仔细观察“可视化数据”窗口内容所发生的变化,理解在双向循环链表中删除元素的执行过程。关于“可视化数据”窗口显示的内容,请参考“实验6”第2.3节中的描述。
# 编写源代码并通过验证
**按照下面的步骤继续实验:**
1. 为Delete函数编写源代码。注意,尽量使用已定义的局部变量。
2. 按F7生成项目。如果生成失败,根据“输出”窗口中的提示信息修改源代码中的语法错误。
3. 按Alt+F5启动验证。如果验证失败,可以使用“输出”窗口中的“比较”功能,或者在“非演示模式”下按F5启动调试后重复按F10单步调试读者编写的源代码,从而定位错误的位置,然后回到步骤1。
# 教师参考答案
访问教师参考答案[domain relative url](engintime/ds-lab/teachers-packet/Lab007.git)
\ No newline at end of file
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论