单链表参考答案.docx

上传人:b****3 文档编号:11709783 上传时间:2023-06-02 格式:DOCX 页数:15 大小:40.21KB
下载 相关 举报
单链表参考答案.docx_第1页
第1页 / 共15页
单链表参考答案.docx_第2页
第2页 / 共15页
单链表参考答案.docx_第3页
第3页 / 共15页
单链表参考答案.docx_第4页
第4页 / 共15页
单链表参考答案.docx_第5页
第5页 / 共15页
单链表参考答案.docx_第6页
第6页 / 共15页
单链表参考答案.docx_第7页
第7页 / 共15页
单链表参考答案.docx_第8页
第8页 / 共15页
单链表参考答案.docx_第9页
第9页 / 共15页
单链表参考答案.docx_第10页
第10页 / 共15页
单链表参考答案.docx_第11页
第11页 / 共15页
单链表参考答案.docx_第12页
第12页 / 共15页
单链表参考答案.docx_第13页
第13页 / 共15页
单链表参考答案.docx_第14页
第14页 / 共15页
单链表参考答案.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单链表参考答案.docx

《单链表参考答案.docx》由会员分享,可在线阅读,更多相关《单链表参考答案.docx(15页珍藏版)》请在冰点文库上搜索。

单链表参考答案.docx

单链表参考答案

 

《算法与数据结构》课程设计报告

 

题目:

单链表

 

专业:

软件工程

班级:

淘宝

学号:

店铺号530213

姓名:

套套

指导教师:

 

完成日期:

2014年1月4日

 

一、课程设计目的

本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。

二、课程设计内容

编制一个单链表的插入、删除、排序、逆置、遍历、求表长的程序。

关注淘宝店:

530213

三、课程设计过程

1.需求分析

本程序运用vc++6.0编写,完成单链表的生成,任意位置插入,删除,对链表内部数据进行排序,以及求链表的总长度。

(1)输入的形式和输入值的范围:

链表生成时要输入链表的种长度,再依次的输入链表内部的元素;插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位置;在所有输入中,元素的值都是整数。

(2)输出的形式:

若正确操作则会输出操作后的整个链表,若操作错误则会提示失败。

(3)程序所能达到的功能:

完成单链表的生成,删除、插入、和排序、计算操作后的链表长度。

(4)测试数据:

A链表的生成:

输入要输入几个数据I=5,然后依次输入1,2,5,3.、4。

B删除操作:

输入要删除的位置sit=2,然后遍历链表得1,5,3,4;操作错误时会提示输入位置不对,操作失败。

C插入操作:

输入要删除的位置sit=2然后输入要插入的值tem=2,遍历链表得1,2,5,3,4;操作错误时会提示输入位置不对,操作失败。

D排序操作:

直接调用排序函数的排序结果为1,2,3,4,5。

E逆置操作:

直接调用逆置函数,结果5,4,3,2,1。

 

2.概要设计

make_list(PNODEPHEAD);//创建链表

traveres_list(PNODEPHEAD);//遍历链表

delete_list(PNODEPHEAD);//删除链表中的元素

get_length(PNODEPHEAD);//求表长

insert_list(PNODEPHEAD);//插入新元素

sort_list(PNODEPHEAD);//用冒泡排序将链表中的元素按大小排序

reverse_list(PNODEPHEAD);//逆置链表

3.详细设计

1)节点:

typedefstructnode

{

intdata;//数据域

structnode*PNEXT;//指针域

}NODE,*PNODE;

2)单链表的操作:

①make_list(PNODEPHEAD);//创建链表

{

生成一个新的节点,接在前一个节点上

}

②traveres_list(PNODEPHEAD);//遍历链表

{

读取一个节点中的值,然后指向下一个节点。

}

③delete_list(PNODEPHEAD);//删除链表中的元素

{

通过类似于遍历的方法到要删除的节点上,将其指针域指向下一个节点,然后释放该跳过的节点的内存空间。

}

④get_length(PNODEPHEAD);//求表长

{

由头结点开始指向下一个节点,然后自增变量加一,直到结束。

}

⑤insert_list(PNODEPHEAD);//插入新元素

{

生成一个新的节点,然后遍历到你要插入的位置,将该节点的指针指向新生成的节点,然后新生成的节点指向该节点的下一个节点。

}

⑥sort_list(PNODEPHEAD);//用冒泡排序将链表中的元素按大小排序

{

运用类似冒泡排序数组的方式对链表中的数据进行排序。

}

⑦reverse_list(PNODEPHEAD);//逆置链表

{

链表逆置。

}

设计如下:

#include

#include

#include

//************结点的结构体*************************************************

typedefstructnode

{

intdata;

structnode*PNEXT;

}NODE,*PNODE;

 

//*************************函数声明****************************************

voidmake_list(PNODEPHEAD);//创建链表

voidtraveres_list(PNODEPHEAD);//遍历链表

voiddelete_list(PNODEPHEAD);//删除链表中的元素

intget_length(PNODEPHEAD);//求表长

voidinsert_list(PNODEPHEAD);//插入新元素

voidsort_list(PNODEPHEAD);//用冒泡排序将链表中的元素按大小排序

voidreverse_list(PNODEPHEAD);//逆置链表

//*************************************************************************

//主函数,用于测试函数是否正确

voidmain()

{

PNODEPHEAD=(PNODE)malloc(sizeof(NODE));

if(NULL==PHEAD)

{

printf("内存分配失败,程序结束。

\n");

exit(-1);

}

printf("(建立链表)\n");

make_list(PHEAD);

traveres_list(PHEAD);

printf("\n");

printf("(删除链表中的元素)\n");

delete_list(PHEAD);

traveres_list(PHEAD);

printf("\n");

printf("(插入新的元素)\n");

insert_list(PHEAD);

traveres_list(PHEAD);

printf("\n");

printf("(对链表进行排序)\n");

sort_list(PHEAD);

traveres_list(PHEAD);

printf("\n");

printf("(逆置链表)\n");

reverse_list(PHEAD);

traveres_list(PHEAD);

printf("\n");

intlength=get_length(PHEAD);

printf("链表的最终长度为length=%d\n",length);

}

//********************函数体*********************************************

voidmake_list(PNODEPHEAD)

{

inti=0;

inttem=0;//临时储存数据的变量

PNODEPMOVE=PHEAD;

PMOVE->PNEXT=NULL;

printf("请输入有几个数据i=");

scanf("%d",&i);

for(inta=0;a

{

PNODEPNEW=(PNODE)malloc(sizeof(NODE));

if(NULL==PNEW)

{

printf("内存分配失败,程序结束。

\n");

exit(-1);

}

printf("输入第%d个数据tem=",a+1);

scanf("%d",&tem);

PNEW->data=tem;

PNEW->PNEXT=NULL;

PMOVE->PNEXT=PNEW;

PMOVE=PMOVE->PNEXT;

}

}

voidtraveres_list(PNODEPHEAD)

{

PNODEPMOVE=(PNODE)malloc(sizeof(NODE));

if(NULL==PMOVE)

{

printf("内存分配失败,程序结束。

\n");

exit(-1);

}

PMOVE=PHEAD->PNEXT;

while(NULL!

=PMOVE)

{

printf("%d",PMOVE->data);

PMOVE=PMOVE->PNEXT;

}

printf("遍历结束。

\n");

}

intget_length(PNODEPHEAD)

{

PNODEPMOVE=(PNODE)malloc(sizeof(NODE));

if(NULL==PMOVE)

{

printf("内存分配失败,程序结束。

\n");

exit(-1);

}

intlength=0;

PMOVE=PHEAD->PNEXT;

while(NULL!

=PMOVE)

{

length++;

PMOVE=PMOVE->PNEXT;

}

returnlength;

}

voiddelete_list(PNODEPHEAD)

{

PNODEPMOVE=(PNODE)malloc(sizeof(NODE));

if(NULL==PMOVE)

{

printf("内存分配失败,程序结束。

\n");

exit(-1);

}

PMOVE=PHEAD;

inti;

printf("请输入要删除的结点的位置sit=");

scanf("%d",&i);

intlength=get_length(PHEAD);

if(i<1||i>length)

{

printf("输入的位置不对,删除失败。

\n");

return;

}

else

{

for(inta=0;a

{

PMOVE=PMOVE->PNEXT;

}

PNODEPTEM=PMOVE->PNEXT;

PMOVE->PNEXT=PMOVE->PNEXT->PNEXT;

free(PTEM);

}

}

voidinsert_list(PNODEPHEAD)

{

PNODEPMOVE=(PNODE)malloc(sizeof(NODE));

if(NULL==PMOVE)

{

printf("内存分配失败,程序结束。

\n");

exit(-1);

}

PMOVE=PHEAD;

inti;

printf("请输入要插入结点到的位置sit=");

scanf("%d",&i);

intlength=get_length(PHEAD);

if(i<0||i>length+1)

{

printf("输入的位置不对,删除失败。

\n");

return;

}

else

{

for(inta=0;a

{

PMOVE=PMOVE->PNEXT;

}

}

PNODEPTEM=PMOVE->PNEXT;

PNODEPNEW=(PNODE)malloc(sizeof(NODE));

if(NULL==PNEW)

{

printf("内存分配失败,程序结束。

\n");

exit(-1);

}

printf("输入新结点的数据tem=");

scanf("%d",&(PNEW->data));

PMOVE->PNEXT=PNEW;

PNEW->PNEXT=PTEM;

}

voidsort_list(PNODEPHEAD)

{

inti,b,tem;

PNODEPMOVE=PHEAD;

for(i=get_length(PHEAD);i>0;i--)

{

PMOVE=PHEAD;

for(b=0;b

{

if(PMOVE->data>PMOVE->PNEXT->data)

{

tem=PMOVE->PNEXT->data;

PMOVE->PNEXT->data=PMOVE->data;

PMOVE->data=tem;

}

PMOVE=PMOVE->PNEXT;

}

}

}

voidreverse_list(PNODEPHEAD)

{

PNODEPMOVE_1,PMOVE_2;

PMOVE_1=PHEAD->PNEXT;

PHEAD->PNEXT=NULL;

while(NULL!

=PMOVE_1)

{

PMOVE_2=PMOVE_1;

PMOVE_1=PMOVE_1->PNEXT;

PMOVE_2->PNEXT=PHEAD->PNEXT;

PHEAD->PNEXT=PMOVE_2;

}

}

 

/*

************运行结果************

(建立链表)

请输入有几个数据i=3

输入第1个数据tem=1

输入第2个数据tem=2

输入第3个数据tem=3

123遍历结束。

(删除链表中的元素)

请输入要删除的结点的位置sit=2

13遍历结束。

(插入新的元素)

请输入要插入结点到的位置sit=2

输入新结点的数据tem=5

153遍历结束。

(对链表进行排序)

135遍历结束。

(逆置链表)

531遍历结束。

链表的最终长度为length=3

Pressanykeytocontinue

*********************************

*/

4.调试分析

  如果遇到用vc进行程序检查时没有错误,但是会运行会弹出白框,则是说明你程序中有指针有指向不明确的地方,程序不行进行的不准确而报错。

5.用户使用说明

  程序名为list_all.exe运行为dos,根据相应中的提示输入既可。

6.测试结果

7.附录

文件list_all.cpp为该程序的软件包。

  make_list(PNODEPHEAD);//创建链表

traveres_list(PNODEPHEAD);//遍历链表

delete_list(PNODEPHEAD);//删除链表中的元素

get_length(PNODEPHEAD);//求表长

insert_list(PNODEPHEAD);//插入新元素

sort_list(PNODEPHEAD);//用冒泡排序将链表中的元素按大小排序

reverse_list(PNODEPHEAD);//逆置链表

四、课程设计体会

对链表的基本操作的了解。

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2