1 / 5
文档名称:

数据结构实验报告1.doc

格式:doc   大小:32KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构实验报告1.doc

上传人:莫比乌斯 2023/3/28 文件大小:32 KB

下载得到文件列表

数据结构实验报告1.doc

相关文档

文档介绍

文档介绍:该【数据结构实验报告1 】是由【莫比乌斯】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【数据结构实验报告1 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。广州大学学生实验报告
开课学院及实验室:计算机楼603B2015年3月5日
学院
数学与信息科学学院
年级、专业、班
信安141
姓名
黄俊强
学号
1415300017
实验课程名称
数据结构实验
成绩
实验项目名称
算法设计
指导老师
钟育彬
实验目的1理解算法的定义,算法特征与算法的描述方法;
2掌握如何在C语言中利用顺序存储结构和非顺序存储结构实现简单算法;
3熟悉抽象数据类型的表示和实现。
实验原理数据结构主要包括三方面的内容:数据的逻辑结构、数据的存储结构和数据的运算及实现(即算法)。熟悉算法的描述与实现,对后续课程有着重要意义。
而抽象数据类型需借助固有数据类型来表示和实现,即利用高级程序设计语言中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节则依赖于所用语言的功能。
问题描述将两个长度不超过10的有序整数集合A和B合并为一个有序整数集合C。请用数组(顺序存储结构)表示这两个集合,针对这种存储结构设计算法并编程实现。
实验内容
#include<>
#include<>
typedefstructnode//节点定义
{
intdata;
structnode*next;
}node,*linklist;
linklistcreat(linklisthead)//该函数用来创建链表
{
node*r,*s;
inta;
r=(linklist)malloc(sizeof(node));
head=r;
scanf("%d",&a);
while(a!=0)
{
s=(node*)malloc(sizeof(node));
s->data=a;
r->next=s;
r=s;
printf("pleaseinputadata:");
scanf("%d",&a);
}
r->next=NULL;
returnhead;
}
linklistlength(linklistl)//返回L中数据元素个数
{
inti=0;
linklistp=l->next;//p指向第一个结点
while(p)
{
i++;
p=p->next;
}
returni;
}
linklistmergel(linklistA,linklistB)//用于实现链表A,B的交叉组合
{
intm,n;
node*p,*q,*s,*t;
linklistC;
p=A->next;
q=B->next;
m=length(A);
n=length(B);
C=A;
if(m<n)
{
p=B->next;
q=A->next;
C=B;
}
while(p&&q)
{
s=p->next;
p->next=q;
if(s)
{
t=q->next;
q->next=s;
}
p=s;
q=t;
}
returnC;
}
linklistsort(linklistL)//链表内容升序排列
{
linklistp,q,min;
inttemp;
p=L;
while(p=p->next)
{
q=min=p;
while(q=q->next){
if(q->data<min->data)
min=q;
}
if(min!=p)
{
temp=p->data;
p->data=min->data;
min->data=temp;
}
}
returnL;
}
linklistDelete(linklistl,intindex) //删除链表指定位置元素
{linklistp,t;
intcx=1;//用于计数
p=l;
if(index<length(l))
{
while(p&&(cx<index))
{
t=p;
p=p->next;
cx++;
}
t->next=p->next;
}
else
printf("inputindexterror");
returnl;
}
linklistDelete_element(linklistl,intdata)//删除指定的元素
{linklistp;
p=l;
if(p->next)
{
while(p->next->data!=data)
{
p=p->next;
}
p->next=p->next->next;
}
else
printf("don'tfaindtheelement");
returnl;
}
linklistdisplay(linklistl)//打印
{linklistp;
printf("newlinklist:\n");
p=l->next;
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
returnl;
}
main()
{
linklistp,q,A,B,C,D;
intindexs;
intdatas;
charname;
intcmd;
printf("CreatlinklistA:\n");//创建A链表,并打印
printf("pleaseinputadata:");
A=creat(A);
printf("CreatlinklistB:\n");//创建B链表,并打印
printf("pleaseinputadata:");
B=creat(B);
C=mergel(A,B);//生成C链表,并打印
printf("linklistC\n");
p=C->next;
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
D=C;//对C进行排序生成D
sort(D);
printf("linklistD:\n");
q=D->next;
while(q)
{
printf("%d\n",q->data);
q=q->next;
}
printf("\npleaseinput0or1\n");
//用1和0判断是按位置删除还是直接删除元素
scanf("%d",&cmd);
if(cmd==0)//位置删除
{
printf("pleaseinputlinklistname\n");
fflush(stdin);
scanf("%c",&name);
printf("\npleaseinputindex\n");
scanf("%d",&indexs);
fflush(stdin);
if(name=='A')
{
Delete(A,indexs);
display(A);
}
elseif(name=='B')
{
Delete(B,indexs);
display(B);
}
elseif(name=='C')
{
Delete(C,indexs);
display(C);
}
elseif(name=='D')
{
Delete(D,indexs);
display(D);
}
else
printf("nameError");
}
elseif(cmd==1)//元素删除
{
fflush(stdin);//清除缓冲
printf("pleaseinputlinklistname\n");
//fflush(stdin);
scanf("%c",&name);
printf("\npleaseinputdatas\n");
scanf("%d",&datas);
if(name=='A')
{
Delete_element(A,datas);
display(A);
}
elseif(name=='B')
{
Delete_element(B,datas);
display(B);
}
elseif(name=='C')
{
Delete_element(C,datas);
display(C);
}
elseif(name=='D')
{
Delete_element(D,datas);
display(D);
}
else
printf("name2error");
}
else
printf("cmdError");
printf("\nOver\n");
getchar();
return0;
}
程序正常运行,并且可以实现将两个集合合并。