数据结构大型作业.docx
- 文档编号:30407647
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:15
- 大小:57.89KB
数据结构大型作业.docx
《数据结构大型作业.docx》由会员分享,可在线阅读,更多相关《数据结构大型作业.docx(15页珍藏版)》请在冰豆网上搜索。
数据结构大型作业
数据结构课程设计
课程设计题目:
作双链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。
姓名:
学号:
姓名:
学号:
姓名:
学号:
姓名:
学号:
班级:
组长:
指导老师:
计算机与信息学院
**大学计算机与信息学院
课程设计任务书
题目:
作双链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。
专业、班级:
计算机与信息学院******班
姓名:
***学号:
姓名:
***学号:
姓名:
***学号:
姓名:
***学号:
主要内容、基本要求、主要参考资料等:
链表节点的数据结构定义:
structnode
{
intnum;
structnode*pre;
Structnode*next;
};
要求:
单链表的创建过程有以下几步
1)定义链表的数据结构。
2)创建一个空表。
3)利用malloc()函数向系统申请分配一个节点。
4)将新节点的指针成员赋值为空。
若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾。
5)判断一下是否有后续节点要接入链表,若有转到3),否则结束。
完成期限:
2013--——2013-12-13
指导教师签名:
课程负责人签名:
2012年1月12日
计算机与信息学院
数据结构课程设计总结报告
设计题目:
作双链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。
学生姓名:
系别:
计算机科学与技术
专业:
计算机科学与技术(嵌入式系统)
班级:
学号:
指导教师:
2013年月日
一、设计题目(任选其一)
作双链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。
二、运行环境(软、硬件环境)
计算机、C语言程序设计环境、VisualC++6.0
三、算法设计的思想
利用链表的尾插法(或者头插法,这个根据实际情况来定)来建立双向链表,随后利用双链表的基本操作对其进行增,删、计数,输出。
其中双链表的增,删,计数和输出都是采用遍历的方式完成的。
四、算法的流程图
五、算法设计分析
六、源代码
#include
#include
typedefstructNode
{
charch;
Node*next;
}
Node,*List;
voidshuru(ListL)//输入函数(包含输入和排序)
{
Lists,q,temp;
charc;
q=L;
intflag=1;
c=getchar();
if(c!
='$')
{
s=(List)malloc(sizeof(Node));
s->ch=c;
s->next=L->next;
L->next=s;
q=s;
}//先插入一个结点
while(flag)
{
c=getchar();
if(c!
='$')//结束符号为'$'
{
if(c>=q->ch)
{
s=(List)malloc(sizeof(Node));
q->next=s;
s->ch=c;
q=s;
}//尾插法
else
{
temp=L;
for(inti=0;i<15;i++)
{
if(c>temp->next->ch)//若插入的数据比该位大则向后找
temp=temp->next;
continue;
if(c<=temp->next->ch)//若插入的数据比该位小则插入
break;
if(temp==q)//若该数是最大的则插入
break;
}//判断C应该插入的位置
s=(List)malloc(sizeof(Node));
s->ch=c;
s->next=temp->next;
temp->next=s;
}//使用头插法
}
else
flag=0;
}
q->next=L;//建立循环链表
}
charchazhao(ListL,inti)
{
Lists;
s=(List)malloc(sizeof(Node));
s=L;
for(inta=0;a
{
s=s->next;
if(s==L)
return'F';//若找到最后一个还没找到则返回F
}
returns->next->ch;
}//查找第I个元素
charchaz(ListL,chard)
{Lists;
s=(List)malloc(sizeof(Node));
s=L;
for(inta=0;a<15;a++)
{s=s->next;
if(s->ch==d)//若找到则返回T
return'T';
}
return'F';//否则返回F
}//查找d这个字符
voidcharu(ListL,charc)
{
Lists,temp;
temp=(List)malloc(sizeof(Node));
temp=L;
for(inti=0;i<15;i++)
{
if(temp->next==L)//若插入的数据为最大的
break;
if(c<=temp->next->ch)//若插入的数据比该位小则插入
break;
if(c>temp->next->ch)//若插入的数据比该位大则向后找
temp=temp->next;
continue;
}//判断C应该插入的位置
s=(List)malloc(sizeof(Node));
s->ch=c;
s->next=temp->next;
temp->next=s;//插入在该结点的后面
}
voidshanchu(ListL,inti)
{Listtemp;
temp=(List)malloc(sizeof(Node));
temp=L;
for(inta=0;a
temp=temp->next;
temp->next=temp->next->next;//实现删除操作
}
intchangdu(ListL)
{
Lists;
s=(List)malloc(sizeof(Node));
s=L->next;
inta=0;
while(s->next!
=L)
{
s=s->next;
a++;//计算长度
}
returna;
}
voidcreatmenu()
{inti;
for(i=0;i<23;i++)
printf("*");
printf("MENU");
for(i=0;i<23;i++)
printf("*");
printf("\n建表:
");
for(i=0;i<23;i++)
printf(".");
printf("press1");
printf("\n打印全表:
");
for(i=0;i<23;i++)
printf(".");
printf("press2");
printf("\n按序查找:
");
for(i=0;i<28;i++)
printf(".");
printf("press3");
printf("\n按字符查找:
");
for(i=0;i<29;i++)
printf(".");
printf("press4");
printf("\n在第i处插入元素:
");
for(i=0;i<13;i++)
printf(".");
printf("press5");
printf("\n按序删除元素:
");
for(i=0;i<19;i++)
printf(".");
printf("press6");
printf("\n将表中元素求和:
");
for(i=0;i<19;i++)
printf(".");
printf("press7");
printf("\n退出程序:
");
for(i=0;i<27;i++)
printf(".");
printf("press0\n");
for(i=0;i<23;i++)
printf("*");
printf("END");
for(i=0;i<23;i++)
printf("*");
}//建立菜单
voidmain()
{ListL,s;
inti,j;
chara;
creatmenu();
do
{
printf("\nPleasechoosethenumberfrom(0~7).....\n");
scanf("%d",&j);
printf("Youchoosethenumber%d",j);
switch(j)
{
case
(1):
{
L=(List)malloc(sizeof(Node));
s=(List)malloc(sizeof(Node));
L->next=NULL;
printf("请输入字符串,以$结束;\n");
shuru(L);
}break;
case
(2):
{
for(s=L->next;s!
=L;s=s->next)
printf("%c",s->ch);
}break;
case(3):
{
printf("请输入要查找的第I个元素:
");
do
{
scanf("%d",&i);
}while(i=='\n'||i=='\r');
printf("%c\n",chazhao(L,i));
}break;
case(4):
{
printf("请输入要查找的字符:
\n");
do
{
scanf("%c",&a);
}while(a=='\n'||a=='\r');
printf("%c",chaz(L,a));
}break;
case(5):
{
printf("请输入要插入的字符:
");
do
{
scanf("%c",&a);
}while(a=='\n'||a=='\r');
charu(L,a);
}break;
case(6):
{
printf("请输入要删除的第I个结点:
");
do{
scanf("%d",&i);
}
while(i=='\n');
shanchu(L,i);
}break;
case(7):
printf("\n%d",changdu(L));break;
}
}while(j!
=0);
printf("\n");
}
七、运行结果分析
八、收获及体会
高骞:
在这个学期,我们开始学习数据结构。
以前我对这一点都不了解,只听学长说过一个经典的方程式:
程序=数据结构+算法。
说数据结构是编程的灵魂,它不是一门语言所以没有关键字。
它只是给程序开发人员一个开发思路而已,讲的主要是已经成熟的编程思想和算法,而且几乎适用于所有开发语言。
就好像学习英语一样,学习编程语言让你会说英语,记住很多英语单词,熟悉英语的很多语法。
而学习数据结构能让你写出很漂亮的英语文章。
很多同学都说,数据结构不好学,这我深有体会。
查资料,网上学习,了解到数据结构是计算机存储、组织数据的方式;是指相互之间存在一种或多种特定关系的数据元素的集合。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
在大一学过C语言后再来学数据结构本来是有基础的,只是当时的基础不牢固,尤其是指针和模块化存在很大问题,因此学起数据结构比较吃力,但是上课时通过老师的讲解还是在很大程度上避免了走弯路,在算法的了解上比以前深刻了,处理问题也逐渐有了自己的想法。
而对于接下来的计算机这门课程而言,软件编程这一块是最为基本的知识储备,只有学好了这个工具才能更好地学习和应用硬件,所以对于数据结构的学习还会继续,不会因为课程的结束而结束。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 大型 作业