C语言设计 链表的综合操作
更新时间:2024-06-02 08:25:01 阅读量: 综合文库 文档下载
哈尔滨工业大学 C语言课程设计(报告) 2011年春季学期
C语言课程设计
专 业: 电子信息科学与技术 日 期: 2011年6月10日
哈尔滨工业大学
2011年5月
C语言课程设计(报告) 2011
链表的综合操作
1. 引言
链表是一种最常见的数据结构,它是动态地进行存储分配的一种结构[1]。所谓动态链表是指链表结构可以是动态地分配存储的,即在需要时才开辟结点的存储空间,实现动态链接。动态链表属于线性表,线性表的主要特点是:除了起始节点和终端节点外其余节点都仅有一个前驱节点和后继节点,起始节点没有前驱节点,终端节点没有后继节点。链表的链式存储是用一组任意的存储单元存放线性表中的数据元素。在链表中借用指针来表示数据元素间的逻辑关系。换句话说,链表中的数据元素对应的节点包括两个域:指针域和数据域。如果每个节点仅包含一个指向其后继元素的指针, 那么我们称此类节点构成的是单链表。本文通过建立、查找、输出、删除学生信息为例,介绍的单链表的基本操作:单链表的建立,查找和删除某些节点。
2.系统需求分析
2.1 系统需求分析
系统需求:
1、建立一个链表,每个节点包括:学号、姓名、成绩,建立链表用函数实现; 2、输入一个学号,检索该学生的有关信息,检索用函数实现; 3、从链表中删除成绩低于50分的学生,删除节点用函数实现。
分析:对于需求1,需一个一个地开辟节点和输入个节点数据信息,并建立起前后相链的关系。对需求2,由于在单链表中,每个节点的存储位置都放在前一节点的next域中,在查找时只能从链表的头指针出发,顺着指针域next逐个节点往下搜索,直至搜索到需要的节点位置。对于需求3,是把要删除的节点原来的链接关系撤销,从而将它从链表中分离开来。
3.系统总体设计
2.1功能模块设计
模块1:
制作链表; 模块2:
检索学生的有关信息; 模块3:
- 1 -
C语言课程设计(报告) 2011
删除成绩低于50分的学生; 模块4:
显示删除后的链表; 模块5:
释放链表中所有节点占用的内存。
2.2程序处理流程
1.先确定录入信息的学生人数,然后依次从键盘键入,并建立起链表。 2.输入要检索学生的学号,并打印出该学生信息。 3.删除
a.询问是否删除,要删除输入Y或y,不删除输入N或n; b.自动删除低于50分学生的信息。
4.打印删除后学生信息。
2.3开发工具
C-free
4.系统详细设计与实现
4.1预处理
#include
4.2数据结构定义
struct Link {
long num; /*学号*/ char name[20]; /*姓名*/ int score; /*成绩*/ struct Link *next; };
2.函数及变量声明
a.变量声明
int b; char a;
struct man *p,*p1;
b.函数声明
输入:struct man *get()
查找:void find(struct man *p1)
删除:struct man*loss(struct man *head)
- 2 -
C语言课程设计(报告) 2011
4.3函数及变量声明
a.函数声明
/*制作链表*/
struct Link *AppendNode(struct Link *head); /*检索学生的有关信息*/ void DispLink(struct Link *head); /*删除成绩低于50分的学生*/ struct Link *DelNode(struct Link *head); /*显示删除后的链表*/ void Print(struct Link *head); /*释放链表中所有节点占用的内存*/ void DeleteMemory(struct Link *head); b.变量声明
int k, n; char s;
struct Link *head=NULL;
4.4主函数、主要处理函数、辅助函数的设计
a.主函数源代码
main() {
int k, n; char s;
struct Link *head=NULL;
printf(\输入学生人数:\ scanf(\ printf(\ k = 1;
while(k <= n) {
head=AppendNode(head); k ++; }
printf(\ DispLink(head); printf(\
- 3 -
C语言课程设计(报告) 2011
printf(\是否要删除成绩低于50分一下学生的信息:\ scanf(\
printf(\
if(s == 'N' || s == 'n') {
printf(\未删除时学生的信息:\\n\ Print(head); }
else if(s == 'Y' || s == 'y') {
head = DelNode(head);
printf(\删除后学生的信息:\\n\ Print(head); }
DeleteMemory(head); }
b.主要处理函数源代码
/*制作链表*/
struct Link *AppendNode(struct Link *head) {
struct Link *p = NULL; struct Link *pr = head;
p = (struct Link *)malloc(sizeof(struct Link)); if(p == NULL) {
printf(\ exit(0); }
if(head == NULL) {
head = p; } else {
while(pr->next != NULL) {
pr = pr->next; }
pr->next = p; }
pr = p;
printf(\学号 姓名 分数:\
- 4 -
C语言课程设计(报告) 2011
scanf(\ pr->next = NULL; return head; }
/*检索学生的有关信息*/
void DispLink(struct Link *head) {
struct Link *p = head; long n; int flag=1;
printf(\输入要检索的学生学号:\ scanf(\
while(flag == 1 && p != NULL) {
if(n == p->num) {
flag = 0; break; }
p = p->next; }
if(flag == 0) {
printf(\ } else {
printf(\ } }
/*删除成绩低于50分的学生*/
struct Link *DelNode(struct Link *head) {
struct Link *p = head, *pr = head, *prr = head;
if(head == NULL) {
printf(\ return (head); }
- 5 -
C语言课程设计(报告) 2011
pr = p;
while(p != NULL) {
if(p->score<50) {
if(p == head) {
head = p->next; } else {
pr->next = p->next; }
p = p->next; } else {
pr = p;
p = p->next; } }
return head; }
/*显示删除后的链表*/
void Print(struct Link *head) {
struct Link *p = head;
while(p != NULL) {
printf(\ p = p->next; } }
c.辅助函数源代码
/*释放链表中所有节点占用的内存*/
void DeleteMemory(struct Link *head) {
struct Link *p = head,*pr = NULL; while(p != NULL) {
pr = p;
- 6 -
C语言课程设计(报告) 2011
p = p->next; free(pr); } }
4.5系统实现(截图)
图1 程序运行情况
5 结术语
通过这次链表操作在理解链表原理的基础上,利用计算机进行程序的上机调试,并附以图示,不仅加深我们的链表的理解,更能提高我们对C语言学习兴趣和效率,使我们在整个学习过程中始终保持良好的学习情绪和活跃的思维。
参 考 文 献
[1] 苏小红, 陈惠鹏, 孙志岗. C语言大学实用教程(第2版).电子工业出版社. 2007 [2] 谭浩强. C程序设计.清华大学出版社. 2005.
- 7 -
正在阅读:
C语言设计 链表的综合操作06-02
我的知音作文1000字06-21
第五届主持人大赛活动策划05-31
计算机视觉中的多视几何05-27
高考数学新题强化训练1205-02
ftth工程技术试题库(下发)(1)06-17
关于电力公司个人工作总结2022年04-25
企业利用商品期货进行套期保值会计处理论文08-23
商务英语信函的语言特征及其翻译11-01
internet基础与应用理论试题A卷02-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 语言
- 操作
- 综合
- 设计
- 2019届高三生物二轮复习 卷必考题型:专练5 实验(通用版)(含
- 2006级《大学物理I》期中考试试卷-A卷
- FANUC - Series - 0i-MD数控铣床面板操作与对刀 - 图文
- 金成雅苑二期-北京市共有产权房预售合同 - 图文
- 国家电网公司企业文化宣贯手册
- 2018-2019版高中生物第二章生物的个体稳态第二节第3课人体的激素
- “快乐小舞星”(启蒙星)教材
- 描写春天景色词语句好段
- 行政综合部经理竞聘演讲稿
- 船舶建造流程 - 图文
- 国际贸易海上货代
- 2016-2017人教版新教材一年级上册数学期末测试卷
- 电力企业政工干部新闻宣传工作措施 docx
- 电压放大电路的设计(吴健雄学院)
- 高等教育自学考试《毛邓三》复习重点串讲资料
- 世纪科学技术发展与展望试题及答案
- 小学语文阅读教学方法研究开题报告
- 历年自考中国法律思想史试题及答案
- 食品配送服务合同
- 市政工程投资估算编制办法