c语言程序设计实训报告 链表操作

更新时间:2023-09-28 17:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

???????学院

C语言程序设计实训报告

姓 名 专 业 班 级 指导教师

二0一一 年 月 七 日

1

目录

一 试验目的和要求 ····································································································································· 3

1实验目的 ············································································································································· 3 2实验要求 ············································································································································· 3 二 运行环境 ················································································································································ 3 三 实训内容 ·················································································································································· 4

1. 程序的逻辑框图 ··························································································································· 4 3.设计说明 ············································································································································· 4

<1>初始化函数 ······························································································································ 5 <2>求表长 ······································································································································ 5 <3>按序号查找元素 ······················································································································· 5 <4>删除元素 ·································································································································· 5 <5>插入元素 ·································································································································· 5 <6>按值查找元素 ··························································································································· 5

四 实验数据和结果分析 ····························································································································· 6

1.实验数据 ············································································································································· 6 2.结果分析 ············································································································································· 6 五 心得体会 ·············································································································································· 7 六 附录 1 ······················································································································································ 8 七 附录 2 ······················································································································································ 9

2

一 试验目的和要求

1实验目的

本实训是软件技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程后进行的一次全面的综合练习。本实训的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力

2实验要求

1. 分析实训题目的要求 2. 写出详细设计说明

3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交实训报告

二 运行环境

本程序可以在98/2000/XP下运行,可以用VC++6.0执行

3

三 实训内容

1. 程序的逻辑框图

窗口初始化 输入数据 输出表长 选择功能 功能判断 调用 相应的函数 根据所选功能执行相应操作 结束 2.使用说明

先输入要输入数据的个数,然后依次的收入数据。程序会自动计算生成表长,然后弹出功能选择框,选择相应的功能即可完成操作。

3.设计说明

应用顺序表的链式存储结构。主要功能为输入输出数据,删除数据,插入数据,按值查找数据,按序号查找数据。

4

<1>初始化函数

说明一个变量head为linklist类型;调用malloc(sizeof(lnode)从而得到一个类型为node的结点,并将该结点的链域置为null。

<2>求表长

说明一个与head同类型的(指针型)变量p作为“指点”工具,在设计一个整型变量i作为计数器,初始时,置p指向头结点,应继续往下“点数”。“点数”可通过以下两操作实现,一个是p“后移”操作p=p->next;另一个是i值加一操作,这相当于“报数”。当p->next==NULL时说明*p是尾结点,“点数”完毕且这时i值正好是表长。

<3>按序号查找元素

在链表中从头指针出发,顺链域next逐个往下搜索,直到找到第i个结点为止,容易看出,此运算区别在于不是从头结点一直数到尾结点,而是数到第i个 结点(存在第i个结点的话)。在算法执行过程中,变量j的值始终是p所指结点的序号(初始值p指头结点,j=0,可认为头结点的序号为0),故只需在每次执行“p后移”操作之前增加一个判断“j

<4>删除元素

将p所指结点*p的链域p->next改为指向待删结点。*p的后继结点,该操作可以通过将带删结点*p的链域p->next的值传给结点*p的链域p->next完成;p->next=p->next。

<5>插入元素

将结点*q的链域指向结点*p的后继结点;将结点*p的链域p->next改为指向新结点。

<6>按值查找元素

按值查找即定位,按从前往后的顺序,依次比较链表中各表结点数据域的值与给定值x第一个值与x相等的表结点序号就是运算结果,若没有这样的结点,运算结果为0.

5

四 实验数据和结果分析

1.实验数据

2.结果分析

该程序能够很好的实现实验要求,并且操作方式简单易懂。先输入要输入数据的个数,然后依次的收入数据。程序会自动计算生成表长,然后弹出功能选择框,选择相应的功能即可完成操作。

6

五 心得体会

本学期第一次c语言实训,通过这次实训也是对我们所学知识的巩固,而且在对算法了解的同时也提高了语言设计能力。编程是一门熟练科学,多编程,水平肯定会提高,最重要的是能够养成一种感觉,就是对程序对算法的敏感,为什么有些人看一个算法一下就能看懂?而自己却不行,其实那是因为那些人看了很多程序,也编了很多程序,所以他们有了那种感觉,所以我觉得大家应该多看多编程序,培养出自己的感觉。

就计算机专业来看,编程能力是很重要的,一个计算机专业的学生首先了解和运用的知识就是编程,而要学习编程,必须要有明确的学习目的,一般来说在学习程序设计方法和语言时,掌握基本原理比较容易,但我们在实际应用和算法估量时我们却从下手。比如本次程序设计,刚开始看提示感觉不是很难,因为在之前我们做过相关练习,,但真的开始着手做时,真的不知道怎么下手,不过通过认真思考和查阅资料和需要的算法后,情况有了些改善。要编写高质量的程序更是我们面临的难题,这要求我们仔细体会,在反复实践过程中掌握编程技巧。

这次编程遇到了很多的问题,记得在刚开始编写的时候,编程不够细心,走了很多弯路,编程本来就要求程序员很细心,在这次链表编程中,要熟悉和了解链表的基本功能和链表里面的指针移动,要了解数据的数据域和指针域,如果不是很了解的话,很有可能把里面的数据搞错,实现不了所需的东西。

通过本次实训,还体会到编程能力的高低主要由以下几点决定:1、编程习惯;2、对算法的认知能力;3、语言掌握能力

7

六 附录 1

参考文献

[1]陈显刚.c语言程序设计[M].北京:北京理工大学出版社,2007. [2]谭浩强.c语言程序设计[M].北京:清华大学出版社,1998. [3]徐新华.c语言程序设计教程[M].北京:中国水利水电出版社,2001. [4]伍一,等.c语言程序设计与实训教程[M].北京:清华大学出版社,2007. [5]徐翠霞. c语言程序设计案例教程[M].北京:北京大学出版社,2008. [6]徐卓群等.数据结构,高等教育出版社,1987. [7]陈小平.数据结构导论,经济科学出版社.2000.

8

七 附录 2

源代码

#include//定义头文件 #include #include

typedef int elemtype;//定义变量 typedef struct lnode { elemtype data;//定义变量 struct lnode *next;//定义结构体指针 }lnode,*linklist;

linklist linklistCreat(void)//初始化函数 { linklist L;//定义变量

L=(linklist)malloc(sizeof(lnode)); if(L)//判断长度L是否不为零 L->next=NULL; return L;//返回L的值 }

linklist linklistLocate1(linklist L,int i)//按元素序号查找函数 { linklist p;//定义变量 int j; p=L;//置初值 j=0; while(p&&jnext;//当未数到第i个结点时继续“点数” j++; } if(j!=i||!p) { printf(\值有误或链表不存在.\ return(NULL); } return (p); }

int linklistLocate2(linklist L,elemtype e) //按元素值查找函数 { int length=0;//定义变量

9

linklist p=L->next; while(p&&p->data!=e) { p=p->next; length++; } return length; }

int linklistLength(linklist L)//求链表长度函数 { linklist p=L; int length=-1; while(p) { p=p->next; length++; } return(length); }

void linklistPrint(linklist L)//输出链表 { elemtype e; for(int i=1;idata; printf(\ } }

int linklistInsert(linklist L,int i,elemtype e)//插入元素函数 { linklist p,q; p=linklistLocate1(L,i-1); if(!p) { printf(\值有误\\n\ return 0; } q=(linklist)malloc(sizeof(lnode)); if(!q) { printf(\申请空间失败\\n\ return 0; } q->data=e; q->next=p->next;

10

本文来源:https://www.bwwdw.com/article/ojjd.html

Top