C语言大作业 有序线性表.docx

上传人:b****9 文档编号:24961474 上传时间:2023-06-03 格式:DOCX 页数:14 大小:64.17KB
下载 相关 举报
C语言大作业 有序线性表.docx_第1页
第1页 / 共14页
C语言大作业 有序线性表.docx_第2页
第2页 / 共14页
C语言大作业 有序线性表.docx_第3页
第3页 / 共14页
C语言大作业 有序线性表.docx_第4页
第4页 / 共14页
C语言大作业 有序线性表.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言大作业 有序线性表.docx

《C语言大作业 有序线性表.docx》由会员分享,可在线阅读,更多相关《C语言大作业 有序线性表.docx(14页珍藏版)》请在冰豆网上搜索。

C语言大作业 有序线性表.docx

C语言大作业有序线性表

C语言大作业有序线性表

程序设计挑战式课程设计

极限挑战

挑战,不是为着征服自然,而是为着突破自我,超越自我

生命有极限,思想无极限,高度有极限,境界无极限

作业名称:

有序线性表

学院:

教育实验学院

班级:

HC001505

学号:

2015300074

姓名:

祖陆晗

团队组成:

祖陆晗

西北工业大学

2016年12月12日

程序设计挑战式课程设计报告

请填写以下十项内容~将表格按页对齐,插入空行,~勿删除任何部分。

1、问题与背景,描述程序所要解决的问题或应用背景,

数组是程序设计中常用的数据结构~但使用数组时必须先定义好数组长度~这个长度一经定义就是固定不变的~如果事先难以确定元素个数~则必须把数组长度定义的足够大~这将占用许多内存。

另一方面~在数组中若要插入或删除某个元素~需要移动插入点或删除点后面的所有的数组元素~这将占用大量的时间。

数组的这些限制给多数据的处理带来了许多不便。

2、开发工具,列出所使用的开发工具和第3方开发库,

VisualC++6.0

3、主要功能,详细说明程序的功能,

本程序是用链表实现有序线性表的程序,可实现的基本功能包括,置空,插入,查找,输出和退出,程序采用菜单界面,用户只需选择选项即可实现相应的功能。

按照提示进行操作,可以实现诸如置空,删除等操作,从而实现数据的处理。

为了更方便的处理多数据问题~需要引入链表这种数据结构。

而本程序正是通过链表~指针~数组~结构体等数据结构和相关文件函数~对数组不易实现的功能进行了整合~相对于数组~本程序可以处理不知道具体量的数据~且可以方便的实现置空表~插入~查找~输出等功能。

4、设计内容,详细描述解决问题的原理和方法、算法、数据结构等,1.加入必要的头文件:

#include

-2-

程序设计挑战式课程设计报告

#include

#include

#include

2.使用结构体类型定义链表:

structnum

{

floatdata;structnum*next;

}num;

3.定义输出函数:

具体介绍在函数模块中展示,

从main函数传递的head指针的数据开始,依次输出链表数据,直到遇到NULL为止。

4.定义置空表函数:

由main函数传递head指针,从head指针到链表节点末尾依次删除各个数据,同时释放内存空间。

5.定义插入函数:

采用静态查找的方法,从main函数传递的head指针的数据开始,依次比较链表中data成员与searchnum的大小,采用while循环实现顺序查找,保证插入数据后,整个链表data成员依然从大到小排列。

6.定义查找函数:

采用静态查找的方法,从main函数传递的head指针的数据开始,依次比较链表中data成员与searchnum的大小,采用while循环实现顺序查找,如果找到数据就输出数据所在的位置,否则提示没有找到。

7.定义创建函数:

链表结构的优势在于可以动态的控制结构的大小,可以在内存中不连续的存储。

本函数的功能在于不断创建新的节点知道满足用户的要求为止(用户可自定义结束条件)。

这一过程通过while循环和malloc()函数分配内存实现。

定义结构体链表指针p始终指向新开辟的节点,p2始终指向下一节点,通过循环完成链表的创建工作。

本函数为无参函数,调用结束后向main函数返回head头指针。

8.定义退出函数:

通过简单switch语句退出与确认退出。

防止误操作。

9.定义欢迎界面

对程序及制作人简单介绍。

5、程序文件与工程名称,标出程序中所有文件名、工程名称及其说明,

文件夹:

程序运行截图

-3-

程序设计挑战式课程设计报告

文本文档:

个人信息

.C文件:

有序线性表

应用程序:

有序线性表//主程序

Word文件:

有序线性表程序报告

6、函数模块,程序中各个函数的原型声明及其说明,

1.插入函数:

原型声明:

structnum*insert(structnum*head)

说明:

采用静态查找的方法,从main函数传递的head指针的数据开始,依次比较链表中data成

员与searchnum的大小,采用while循环实现顺序查找,保证插入数据后,整个链表data成

员依然从大到小排列。

2.创建函数:

原型声明:

structnum*creat(void)

说明,链表结构的优势在于可以动态的控制结构的大小,可以在内存中不连续的存储。

函数的功能在于不断创建新的节点知道满足用户的要求为止(用户可自定义结束条件)。

这一过程通过while。

循环和malloc()函数分配内存实现。

定义结构体链表指针p始终指向

新开辟的节点,p2始终指向下一节点,通过循环完成链表的创建工作。

本函数为无参函

数,调用结束后向main函数返回head头指针。

3.查找函数:

原型声明:

structnum*search(structnum*head)

说明:

采用静态查找的方法,从main函数传递的head指针的数据开始,依次比较链表中data

成员与searchnum的大小,采用while循环实现顺序查找,如果找到数据就输出数据所在

的位置,否则提

示没有找到。

4.输出函数:

原型声明:

structnum*print(structnum*head)

说明:

从main函数传递的head指针的数据开始,依次输出链表数据,直到遇到NULL为止。

5.清屏函数:

-4-

程序设计挑战式课程设计报告

说明:

这是系统自带函数,需要包含”stdlib.h”头文件,使用system(“cls”)实现。

6.置空函数:

原型声明:

structnum*clean(structnum*head)

说明:

由main函数传递head指针,从head指针到链表节点末尾依次删除各个数据,同时释

放内存空间。

7.main函数:

说明:

系统主函数,负责输入输出和各函数的调用,采用while

(1)实现连续循环,通过switch语句选择调用相应的函数实现功能。

7、使用说明,运行程序的小型说明书,

初次运行程序时必须先初始化数据,用户可自定义链表创建结束条件,并从小到大依次输入一组数据,最后一个数据是结束的标志,不计入链表的数据内容。

输入完成后回车,系统自动输出数据,用户可判断输入的数据是否正确。

接下来将显示菜单部分,共分基本功能和附加功能,用户通过输入功能项目前的序号来启动对应功能。

“置空表”是将链表数据删除,同时释放所占的内存,“插入”是用户可在原来的链表上新加入一个或多个数据,系统将自动排序,“删除”是用户将原有数据清空,同时释放内存,“查找”可以帮助用户确认某数据是否在链表中,“输出”是将当年内存中的链表数据依次在屏幕上显示,用户可使用“退出”离开程序。

程序将循环显示功能菜单,直到用户退出为止。

8、程序开发总结,简要叙述编写本作业的收获与思考,

通过这次大作业,我感受到了编程的魅力。

其实链表对于我这种初学者来说真的不容易,从确定选题到自学相关知识,再到自己一点一点的编

-5-

程序设计挑战式课程设计报告

程,期间遇到了很多困难,但还是坚持了下来。

最终编译成功的那一刻,心中真的是充满了成就感。

这次大作业的完成不仅让我的知识结构更加完善,更锻炼了我的毅力,让我感受到了编程的魅力。

希望自己在未来的日子里把编程继续下去,不断学习,不断追求新的成功的喜悦,

9、运行截图,附上程序运行的截图画面~至少有1幅~截图越翔实得分越高,

(1)这是欢迎界面,程序运行后就可以看见:

(2)按照提示进行操作,就可以成功创建一个链表:

-6-

程序设计挑战式课程设计报告

(3)插入并输入的操作界面:

-7-

程序设计挑战式课程设计报告

(4)查找功能的操作界面:

-8-

程序设计挑战式课程设计报告(5)置空和退出界面:

10、源程序,附上程序源代码~若是多个文件~标出文件名,

#include

#include

#include

#include

#defineLENsizeof(structnum)

intn;//全局变量,用于记录链表的数据个数

structnum//使用结构体类型定义链表

{

floatdata;structnum*next;}num;

structnum*print(structnum*head)//定义输出函数

{

structnum*p;

inti;chara;

printf("\n目前线性表中的数据有%d个,如下所示:

\n",n);

-9-

程序设计挑战式课程设计报告

p=head;

i=0;

if(head!

=NULL)

do

{if(i%5==0)printf("\n");i++;

printf("%g\n",p->data);//数据输出

p=p->next;

}while(p!

=NULL);//采用%g输出,可以不输出无意义的0

printf("\n");

printf("按回车键继续\n");

a=getchar();

return(head);//返回头指针

}

structnum*clean(structnum*head)//定义置空表函数,{

structnum*p;

chari;

while(head->next!

=NULL)

{p=head->next;

head->next=head->next->next;

free(p);

}//使用free(*)函数释放内存

printf("链表已经成功置空!

");

head=NULL;

printf("按回车键继续");

i=getchar();

return(head);

}

structnum*insert(structnum*head)//定义插入函数

{

structnum*p0,*p1,*p2,*in;

p1=head;

printf("请输入要插入的数据:

\n");

in=(structnum*)malloc(LEN);//使用malloc(LEN)分配内存空间

p0=in;

scanf("%f",&in->data);

if(head==NULL)

{

head=p0;p0->next=NULL;

}

else{

while((p0->data>p1->data)&&(p1->next!

=NULL))//查找符合排列顺序的插

-10-

程序设计挑战式课程设计报告

入点

{p2=p1;p1=p1->next;}

if(p0->data<=p1->data)

{

if(head==p1)head=p0;

elsep2->next=p0;p0->next=p1;}

else{p1->next=p0;p0->next=NULL;}//如果插入点是最后一个,就用NULL使链表结束

}

n=n+1;

return(head);//返回头指针

}

structnum*search(structnum*head)//定义查找函数

{

typedefintCOUNT;COUNTi=0;

structnum*p;

floatsearchdata;

printf("请输入你想要查找的数据:

\n");

scanf("%f",&searchdata);

if(head==NULL){printf("\n这是一个空表,请先建立,然后再删除~");}

p=head;

while((searchdata!

=p->data)&&(p->next!

=NULL)){p=p->next;i++;}//顺序线性查找

if(searchdata==p->data)

{

printf("%g已经找到。

这是链表中的第%d个数据。

\n",searchdata,i+1);

}

elseprintf("没有在链表中找到%g请再次确认数据~\n",searchdata);

return(head);

}

structnum*creat(void)//定义创建函数

{

structnum*head;

structnum*p1,*p2;

n=0;

floati;

p1=p2=(structnum*)malloc(LEN);

printf("第一次使用本程序,请创建链表.\n");

printf("请输入一个数字作为链表结束创建的条件:

\n请注意:

不能用要输入的链表的数据作为该结束条件~\n");

-11-

程序设计挑战式课程设计报告

scanf("%f",&i);

printf("请从小到大输入数据来初始化链表(注意从小到大,用空格隔开)\n");

scanf("%f",&p1->data);

head=NULL;

while(p1->data!

=i)//当输入为i时不再开辟新区域

{n=n+1;

if(n==1)head=p1;

elsep2->next=p1;

p2=p1;

p1=(structnum*)malloc(LEN);

scanf("%f",&p1->data);

}

p2->next=NULL;

return(head);

}

voidvanish(structnum*head)//定义退出函数

{

chari;

printf("确定退出?

(输入Y确认退出,输入N返回)\n");//退出时提醒

i=getchar();

switch(i)//不区分大小写

{

case'Y':

case'y':

exit

(1);break;

case'N':

case'n':

;break;

}

}

voidinfo()//定义欢迎信息

{

printf("\n\n\n\n\n\n\n\t");

printf("\t欢迎使用“用链表实现有序线性表”演示\n");

printf("\n\n\t\t\t制作:

西北工业大学教育实验学院祖陆晗\n");

printf("\n\n\t\t\t学号:

2015300074\n");

printf("\n\n\n\t\t\t按回车键继续操作");

getchar();//getchar()起到暂停作用

}

intmain()

-12-

程序设计挑战式课程设计报告

{

structnum*head;

inti,t;

info();

system("cls");

head=creat();print(head);

while

(1)

{

printf("\n基本功能:

\n1.置空表\n2.插入\n3.查找\n4.输出\n0.退出\n");

printf("\n请选择一项操作(输入项目前的数字或字母).\n");

//t=getchar();//接收创建链表时的最后一个回车

scanf("%d",&i);

switch(i)

{

case0:

vanish(head);break;

case1:

head=clean(head);break;

case2:

head=insert(head);break;

case3:

head=search(head);break;

case4:

head=print(head);break;

}

}

}

-13-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1