对链表插入和删除操作C++任务书.docx
《对链表插入和删除操作C++任务书.docx》由会员分享,可在线阅读,更多相关《对链表插入和删除操作C++任务书.docx(11页珍藏版)》请在冰豆网上搜索。
对链表插入和删除操作C++任务书
河北联合大学
《软件设计基础(C++)》
课程设计报告
设计名称:
对链表插入和删除操作
姓名:
张悦
学号:
201005100112
专业班级:
10石油
(1)
学院:
矿业工程
设计时间:
五月十日到六月十日
设计地点:
学校机房
成绩:
指导教师评语:
指导教师签字:
年月日
目录
1.课程设计目的4
2.课程设计任务与要求4
3.课程设计说明书5
4.课程设计成果7
5.程序调试过程13
6.设计问题的不足和改进方案14
7.课程设计心得14
8.参考文献15
1.课程设计目的
通过链表程序的设计,培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。
主要是培养学生利用系统提供的标准函数及典型算法进行创新设计,掌握各种数据结构。
2.课程设计任务与要求:
1.基本要求:
(1)要求用c++的思想来完成程序的设计。
(2)各个功能分别使用函数来完成,主函数和各个函数分别存放在不同的.cpp文件中,要求使用头文件。
2.创新要求:
在基本要求达到后,进行创新设计,例如:
将链表进行排序,而后插入新的结点使其仍然有序。
3.课程设计说明书
概要设计
模块说明:
在我设计的程序中一共包括了五个模块,分别是:
创立模块,排序模块,插入模块,删除模块和输出模块。
在几个模块是独立分开作为子函数的,程序中多次用到while函数,将这几个模块联系起来。
详细设计
总体流程图:
4.课程设计成果
头文件:
#include
#include
structstudent
{
intnum;
charname[10];
charsex[10];
student*next;
};
student*creat(int);
student*del(student*head,ints);
void*insert(student*head,inti);
void*Sort(student*head);
voidprint(student*head);
主函数:
#include"头文件.h"
voidmain()
{intN;
cout<<"请输入学生总数:
";
cin>>N;
student*headl,*p,*q;
cout<<"请依次输入学生学号、姓名、性别:
"<headl=creat(N);
print(headl);
cout<<"排序后为"<Sort(headl);
p=headl;
print(headl);
p=headl;
inti;
cout<<"插入到第几个学生后面:
";
cin>>i;
insert(headl,i);print(headl);
p=headl;
ints;
cout<<"要删除的学号是:
";
cin>>s;
del(headl,s);
print(headl);
while(p)
{
q=p;
p=p->next;
deleteq;
}
}
插入:
#include"头文件.h"
void*insert(student*head,inti)
{
student*s,*p;
intj;
s=new(student);
cout<<"请分别输入插入学生的学号、姓名、性别:
";
cin>>s->num>>s->name>>s->sex;
if(i==0)
{
s->next=head;
head=s;
}
else
{p=head;
j=1;
while(p!
=NULL&&j
j++;
p=p->next;
}
if(p!
=NULL)
{
s->next=p->next;
p->next=s;
}
else
cout<<"没找到!
";
}
returnhead;
}
创建列表:
#include"头文件.h"
student*creat(intN)
{
student*head;
student*p1;
student*p2;
head=NULL;
p1=new(student);
p2=p1;
for(inti=0;i{
cin>>p1->num>>p1->name>>p1->sex;
if(i==0)
head=p1;
else
p2->next=p1;
p2=p1;
p1=new(student);
}
delete(p1);
p2->next=NULL;
returnhead;
}
排序列表:
#include"头文件.h"
void*Sort(student*head)
{
student*p,*q;
charname1[10];
charsex1[16];
intnum1;
p=head;
while(p)
{q=p->next;
while(q)
{if(p->num>q->num)
{num1=p->num;
p->num=q->num;
q->num=num1;
strcpy(name1,p->name);
strcpy(p->name,q->name);
strcpy(q->name,name1);
strcpy(sex1,p->sex);
strcpy(p->sex,q->sex);
strcpy(q->sex,sex1);
}
q=q->next;
}
p=p->next;
}
returnhead;
}
删除结点:
#include"头文件.h"
student*del(student*head,ints)
{
student*p1;
student*p2;
if(head==NULL)
{
returnhead;
}
p1=head;
while(s!
=p1->num&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;
}
if(s==p1->num)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
delete(p1);
cout<<"已删除"<
}
else
cout<<"没有找到"<returnhead;
}
输出链表:
#include"头文件.h"
voidprint(student*head)
{
student*p;
p=head;
if(p==NULL)return;
do
{
cout<num<<"\t"<name<<"\t"<sex<p=p->next;
}while(p!
=NULL);
}
5.程序调试过程
1.首先输入学生总数,然后依次输入学生学号、姓名、性别来创建列表。
再依次输出,并按学号排序输出;
2.输入需要插入学生的位置,输入学生数据,输出;
3.输入需要删除的学生的学号,删除学生,输出剩余学生。
6.设计问题的不足和改进方案
1.开始我编的头文件有位置问题,但是经过查书问同学多次更改代码,调试程序最终出现正确结果;
2.定义变量不能正确输出和输入,不能正确传值;
3.排序不能全部互换位置,只是学号的互换。
改进方案:
全部输入,全部改值。
7.课程设计心得
开始老师布置作业时我选择的是链表问题,此题是对单向链表的排序、插入及删除操作。
开始时我首先是询问的原先学过的同学,他们告诉我到网上搜搜,有相应的例题,等我把课本上关于这部分的知识看过之后,我真的这样做了,下载下来研究了几天,然后我发现网上的我有好多处都看不懂,和我们学的不太一样,脑子很乱,更不知怎么去改别人编出来的程序,就放了几天。
后来我我要编的内容相继拿给了几个同学看,他们都表示无能为力,这时我真的有些灰心了,我怕自己完不成任务,现在只有靠自己了,我把课本上相应的内容又仔细地研究了一下,并在图书馆借了两本相关的书,看过之后对着电脑整整呆了一天终于编出来了。
我把程序编出来了,我想大声告诉所有的人,我想通过这次作业我不仅更了解这门课程的知识,更好的掌握它,更重要的是当遇到困难时一定要相信自己,不能一心的指着别人,连自己都放弃了你说别人还有什么办法呢?
8.参考文献
《visualc++程序设计实验教程》---中国铁道出版社
《visualc++程序设计基础》---中国铁道出版社
《C++程序设计题典》---人民出版社
《C++程序设计与解答》