数据结构实验报告顺序表的创建遍历及有序合并操作.docx
- 文档编号:25344696
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:10
- 大小:47.75KB
数据结构实验报告顺序表的创建遍历及有序合并操作.docx
《数据结构实验报告顺序表的创建遍历及有序合并操作.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告顺序表的创建遍历及有序合并操作.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构实验报告顺序表的创建遍历及有序合并操作
数据结构实验报告-顺序表的创建、遍历及有序合并操作
二、实验内容与步骤
实现顺序表的创建、遍历及有序合并操作,基本数据结构定义如下:
typedefintElemType;
#defineMAXSIZE100
#defineFALSE0
#defineTRUE1
typedefstruct
{ElemTypedata[MAXSIZE];
intlength;
}seqlist;
创建顺序表,遍历顺序表
#include
#include
#defineMAXSIZE100
#defineIcreament20
#defineFALSE0
#defineTRUE1
typedefintElemType;//用户自定义数据元素类型
//顺序表结构体的定义
typedefstruct
{
ElemType*elem;//顺序表的基地址
intlength;//顺序表的当前长度
intlistsize;//预设空间容量
}SqList;//线性表的顺序存储结构
SqList*InitList()//创建空的顺序表
{
SqList*L=(SqList*)malloc(sizeof(SqList));//定义顺序表L
if(!
L)
{
printf("空间划分失败,程序退出\n");
returnNULL;
}
L->elem=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
if(!
L->elem)
{
printf("空间划分失败,程序退出\n");
returnNULL;
}
L->length=0;
L->listsize=MAXSIZE;
returnL;
}
intCreateList(SqList*L)//创建顺序表(非空)
{
intnumber;//顺序表中元素的个数
inti;//循环变量
printf("请输入顺序表中元素的个数:
");
scanf("%d",&number);
if(number>MAXSIZE)//一定要判断输入的个数是否大于顺序表的最大长度
{
printf("输入个数大于顺序表的长度\n");
return0;
}
for(i=0;i { printf("输入第%d个数: ",i+1); scanf("%d",L->elem+i);//L->elem+i: 每次的输入都保存在顺序表元素中的下一个地址,而不是一直放在元素的首地址 }//给顺序表中每个数据元素赋值 L->length=number;//当前顺序表的长度 return1; } voidprint(SqList*L)//遍历顺序表 { inti; printf("\n开始遍历顺序表\n"); for(i=0;i { printf("%d",*(L->elem+i));//L->elem+i: 和输入是一个道理 } printf("\n遍历结束\n"); printf("\n"); } intmain() { SqList*L=InitList();//申请一个指向顺序表的指针,并对其初始化 if(! L)//判断申请是否成功 { printf("初始化线性表失败\n"); return1; } if(! CreateList(L))//判断创建顺序表是否成功 { printf("创建顺序表失败\n"); return1; } print(L);//打印顺序表与上面遍历顺序表相对应,若没有就不遍历 free(L->elem);//释放申请的顺序表元素的内存 free(L);//释放申请的顺序表内存 return0; } 表的有序合并 #include #include #defineMAXSIZE100 typedefintElemType; //顺序表结构体的定义 typedefstruct{ ElemTypedata[MAXSIZE]; intsize; }seqlist; //函数声明 voidinit(seqlist*slt); voiddisplay(seqlistslt); voidsort(seqlist*s); voidcombine(seqlist*s1,seqlist*s2,seqlist*s3); //顺序表的初始化函数 voidinit(seqlist*slt) { slt->size=0; } //顺序表的显示函数 voiddisplay(seqlistslt) { inti; if(! slt.size) { printf("\n顺序表为空"); } else { for(i=0;i printf("\n%d\n",slt.data[i]); } } //顺序表排序 voidsort(seqlist*s) { inti; intj; inttemp; for(i=0;i { for(j=i+1;j { if(s->data[i]>=s->data[j]) { temp=s->data[i]; s->data[i]=s->data[j]; s->data[j]=temp; } } } } //两个有序顺序表连接函数 voidcombine(seqlist*s1,seqlist*s2,seqlist*s3) { inti=0; intj=0; intk=0; while(i { if(s1->data[i]<=s2->data[j]) { s3->data[k]=s1->data[i]; i++; } else { s3->data[k]=s2->data[j]; j++; } k++; } if(i==s1->size) { while(j { s3->data[k]=s2->data[j]; k++; j++; } } if(j==s2->size) { while(i { s3->data[k]=s1->data[i]; k++; i++; } } s3->size=k; } //主函数 intmain() { inti; intj; intx; intn; seqlistlist1; seqlistlist2; seqlistlist3; init(&list1); printf("第一个顺序表元素个数: \n"); scanf("%d",&n); printf("第一个顺序表输入: \n"); for(i=0;i { scanf("%d",&list1.data[i]); list1.size++; } sort(&list1);//第一个表排序 init(&list2); printf("第二个顺序表元素个数: \n"); scanf("%d",&n); printf("第二个顺序表输入: \n"); for(i=0;i { scanf("%d",&list2.data[i]); list2.size++; } sort(&list2);//第二个表排序 init(&list3); combine(&list1,&list2,&list3); printf("表一与表二连接后: \n"); display(list3); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 顺序 创建 遍历 有序 合并 操作