C语言数据结构线性表的基本操作实验报告Word格式文档下载.docx
- 文档编号:13291944
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:44
- 大小:822.70KB
C语言数据结构线性表的基本操作实验报告Word格式文档下载.docx
《C语言数据结构线性表的基本操作实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言数据结构线性表的基本操作实验报告Word格式文档下载.docx(44页珍藏版)》请在冰豆网上搜索。
1.源程序
(1)源程序(实验要求1和3)
#include<
stdio.h>
malloc.h>
stdlib.h>
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefstructarr
{
int*elem;
intlength;
intlistsize;
}Sqlist;
voidmenu();
//菜单
voidInitList(Sqlist*p);
//创建线性表
voidShowList(Sqlist*p);
//输出顺序线性表
voidListDelete(Sqlist*p,inti,int&
e);
//在顺序线性表中删除第i个元素,并用e返回其值
voidListInsert(Sqlist*p);
//在顺序线性表中第i个元素前插入新元素e
voidListEmpty(Sqlist*p);
//判断L是否为空表
voidGetList(Sqlist*p,inti,int&
//用e返回L中第i个数据元素的值
voidListInsert(Sqlist*p,inti,inte);
boolcompare(inta,intb);
voidLocateElem(Sqlist*L,inte);
//在顺序线性表L中查找第1个值与e满足compare()d元素的位序
voidMergeList_L(Sqlist*La,Sqlist*Lb);
//归并
voidmain()
SqlistLa;
SqlistLb;
intn,m,x;
menu();
scanf("
%d"
&
n);
while(n)
{
switch(n)
{
case0:
;
break;
case1:
InitList(&
La);
break;
case2:
ListEmpty(&
case3:
printf("
请输入插入的位序:
\n"
);
scanf("
m);
请出入要插入的数:
x);
ListInsert(&
La,m,x);
case4:
请输入删除元素的位序:
ListDelete(&
删除的元素为:
%d\n"
x);
case5:
请输入要找的与线性表中相等的数:
LocateElem(&
La,m);
case6:
请输入查找的位序:
GetList(&
La中第%d个元素的值为%d\n"
m,x);
case7:
ShowList(&
case8:
Lb);
case9:
MergeList_L(&
La,&
归并成功!
"
}
menu();
scanf("
}
}
/*菜单*/
voidmenu()
printf("
********************\n\n"
0.退出\n\n"
1.创建线性表La\n\n"
2.判断La是否为空表\n\n"
3.插入元素(La)\n\n"
4.删除元素(La)\n\n"
5.定位元素(La)\n\n"
6.取元素(La)\n\n"
7.输出线性表\n\n"
8.创建线性表Lb\n\n"
9.归并为一个线性表La\n\n"
/*创建顺序线性表L*/
voidInitList(Sqlist*L)
intn;
inti=0;
L->
elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(NULL==L->
elem)
printf("
储存分配失败!
else
L->
length=0;
listsize=LIST_INIT_SIZE;
输入顺序表a:
while(n)
L->
elem[i]=n;
i++;
length++;
listsize=L->
listsize-4;
/*输出顺序线性表*/
voidShowList(Sqlist*p)
inti;
if(0==p->
length)
数组为空!
for(i=0;
i<
p->
length;
i++)
%d"
p->
elem[i]);
/*判断L是否为空表*/
voidListEmpty(Sqlist*p)
L是空表!
L不是空表!
/*在顺序线性表中第i个元素前插入新元素e*/
voidListInsert(Sqlist*p,inti,inte)
int*newbase;
int*q1;
int*q2;
while(i<
1||i>
length+1)
您输入的i超出范围!
\n请重新输入要插入的位置\n:
i);
if(p->
length>
=p->
listsize)
newbase=(int*)realloc(p->
elem,(p->
listsize+LISTINCREMENT)*sizeof(int));
if(!
newbase)
exit(0);
else
p->
elem=newbase;
listsize+=LISTINCREMENT;
q1=&
(p->
elem[i-1]);
for(q2=&
elem[p->
length-1]);
q2>
=q1;
--q2)
*(q2+1)=*q2;
*q1=e;
++p->
/*/在顺序线性表中删除第i个元素,并用e返回其值*/
e)
int*q1,*q2;
请重新输入:
e=*q1;
q2=p->
elem+p->
length-1;
for(++q1;
q1<
=q2;
++q1)
*(q1-1)=*q1;
--p->
/*对比a与b相等*/
boolcompare(inta,intb)
{
if(a==b)
return1;
return0;
/*在顺序线性表L中查找第1个值与e满足compare()d元素的位序*/
voidLocateElem(Sqlist*L,inte)
inti=1;
int*p;
p=L->
elem;
=L->
length&
&
!
compare(*p++,e))
++i;
if(i<
第1个与e相等的元素的位序为%d\n"
i);
没有该元素!
/*用e返回L中第i个数据元素的值*/
Sqlist*p1;
p1=p;
e=p1->
elem[i-1];
}
/*已知顺序线性表La和Lb是元素按值非递减排列*/
/*把La和Lb归并到La上,La的元素也是按值非递减*/
voidMergeList_L(Sqlist*La,Sqlist*Lb)
inti=0,j=0,k,t;
Sqlist*pa,*pb;
pa=La;
pb=Lb;
pa->
j<
pb->
if(pa->
elem[i]>
=pb->
elem[j])
if(pa->
listsize==0)
{
newbase=(int*)realloc(pa->
elem,(pa->
if(!
exit(0);
}
for(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数据结构 线性 基本 操作 实验 报告