数据结构实验总.docx
- 文档编号:9207047
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:134
- 大小:887KB
数据结构实验总.docx
《数据结构实验总.docx》由会员分享,可在线阅读,更多相关《数据结构实验总.docx(134页珍藏版)》请在冰豆网上搜索。
数据结构实验总
第2章
2.1顺序表
2.1.1(去相同)
将A、B线性表输出,且B表连接在A表后面,A表中存在的元素在B中删去
源代码:
#include
#include
#include
usingnamespacestd;//使用std命名空间
#defineLIST_INT_SIZE100//线性表示存储空间的初始分配量
typedefintElemType;
structSqList//定义一个结构体类型
{
ElemType*elem;//存储空间基地址
intlength;//当前长度
};
voidmain()
{
SqListLa,Lb;
voidInitList(SqList*L);//构造线性表
voidOutList(SqList*L);
voidInsert(SqList*La,SqList*Lb);//输出线性表
InitList(&La);
printf("\n");
InitList(&Lb);
Insert(&La,&Lb);
printf("\n");
OutList(&La);
printf("\n");
}
voidInitList(SqList*L)//构造一个空的线性表L
{
L->elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));//申请存储空间
printf("请输入长度:
");
scanf("%d",&L->length);
printf("请输入元素:
");
for(inti=0;i
scanf("%d",L->elem+i);//输入线性表中的元素
}
voidOutList(SqList*L)//输出线性表中的元素
{
printf("输出C的元素为:
");
for(inti=0;i
printf("%d",*(L->elem+i));
}
voidInsert(SqList*La,SqList*Lb)//将B线性表的元素加到A线性表中,并从小到大排,
{
inti,j,key;
intLengtha=La->length;
for(i=0;i
{
key=0;
for(j=0;j
{
if(*(La->elem+j)==*(Lb->elem+i))
key=1;
}
if(key==0)
{
*(La->elem+Lengtha)=*(Lb->elem+i);
Lengtha++;
}
}
La->length=Lengtha;
}
实验结果如图(2-1)所示:
2-1将A、B表相连
2.1.2(不删除归并1)
将A、B线性表从小到大归并
源代码:
#include
#include
#defineLIST_INT_SIZE100//线性表示存储空间的初始分配量
typedefintElemType;
structSqList//定义一个结构体类型
{
ElemType*elem;//存储空间基地址
intlength;//当前长度
};
voidmain()
{
SqListLa,Lb;
voidInitList(SqList*L);//构造线性表
voidOutList(SqList*L);//输出线性表
voidMergeList(SqList*La,SqList*Lb);
voidSort(SqList*L);//线性表排序
InitList(&La);
printf("\n");
InitList(&Lb);
MergeList(&La,&Lb);//将两表合并为仪表
printf("\n");
Sort(&La);//将A线性表中的元素排列
OutList(&La);
printf("\n");
}
voidInitList(SqList*L)//构造一个空的线性表L
{
L->elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));//申请存储空间
printf("请输入长度:
");
scanf("%d",&L->length);
printf("请输入元素:
");
for(inti=0;i
scanf("%d",L->elem+i);//输入线性表中的元素
}
voidOutList(SqList*L)//输出线性表中的元素
{
printf("输出C的元素为:
");
for(inti=0;i
printf("%d",*(L->elem+i));
}
voidMergeList(SqList*La,SqList*Lb)//将B线性表的元素加到A线性表中
{
inti=0;
intLengtha=La->length,Lengthb=Lb->length;
for(i=0;i { *(La->elem+Lengtha+i)=*(Lb->elem+i); } La->length=Lengtha+Lengthb; } voidSort(SqList*L)//排序函数 { inti,j; ElemTypet; for(i=0;i for(j=0;j if(L->elem[j]>L->elem[j+1]) { t=L->elem[j]; L->elem[j]=L->elem[j+1]; L->elem[j+1]=t; } } 实验结果如图(2-2)所示: 2-2将A、B线性表从小到大归并 2.1.3(元素插入) 将一元素插到线性表A中 源代码: #include #include #defineLIST_INT_SIZE100//线性表示存储空间的初始分配量 typedefintElemType; structSqList//定义一个结构体类型 { ElemType*elem;//存储空间基地址 intlength;//当前长度 }; voidmain() { SqListLa; intx; ElemTypey; voidInitList(SqList*L);//构造线性表 voidOutList(SqList*L);//输出线性表 boolListInsert(SqList&L,intpos,ElemTypee);//将元素插入线性表中,(,插入的位置,插入的元素) InitList(&La); printf("\n"); printf("请输入元素插入的位置: "); scanf("%d",&x); printf("\n"); printf("请输入需插入的元素: "); scanf("%d",&y); ListInsert(La,x,y);//实现元素的插入 OutList(&La); printf("\n"); } voidInitList(SqList*L)//构造一个空的线性表L { L->elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));//申请存储空间 printf("请输入长度: "); scanf("%d",&L->length); printf("请输入元素: "); for(inti=0;i scanf("%d",L->elem+i);//输入线性表中的元素 } voidOutList(SqList*L)//输出线性表中的元素 { printf("输出元素: "); for(inti=0;i printf("%d",*(L->elem+i)); } boolListInsert(SqList&L,intpos,ElemTypee)//第pos个位置插入元素e,L的长度增加1 { if(pos<1||pos>L.length)//判断插入的位置 returnfalse; for(intj=L.length-1;j>=pos-1;j--)//当顺序比输入的元素位置大时,将原来的元素分别向后挪一位 L.elem[j+1]=L.elem[j]; L.elem[pos-1]=e;//将e插入到顺序表第pos-1的位置,类似数组 L.length++;//当前长度加1, returntrue; } 实验结果如图(2-3)所示: 2-3将一个元素插入线性表中 2.1.4(元素删除) 将线性表A中某一位置的元素删除 源代码: #include #include #defineLIST_INT_SIZE100//线性表示存储空间的初始分配量 typedefintElemType; structSqList//定义一个结构体类型 { ElemType*elem;//存储空间基地址 intlength;//当前长度 }; voidmain() { SqListLa; intx; ElemTypey; voidInitList(SqList*L);//构造线性表 voidOutList(SqList*L);//输出线性表 boolListDelete(SqList&L,int&pos,ElemTypee);//将元素插入线性表中,(,删除的位置,返回的元素) InitList(&La); printf("\n"); printf("请输入删除元素的位置: "); scanf("%d",&x); printf("\n"); ListDelete(La,x,y);//实现元素的插入 OutList(&La); printf("\n"); } voidInitList(SqList*L)//构造一个空的线性表L { L->elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));//申请存储空间 printf("请输入长度: "); scanf("%d",&L->length); printf("请输入元素: "); for(inti=0;i scanf("%d",L->elem+i);//输入线性表中的元素 } voidOutList(SqList*L)//输出线性表中的元素 { printf("输出元素: "); for(inti=0;i printf("%d",*(L->elem+i)); } boolListDelete(SqList&L,int&pos,ElemTypee)//在顺序线性表中删除第i个元素,并用e返回其值 { if(pos<1||pos>L.length)//判断删除元素所在的位置 returnfalse; e=L.elem[pos-1];//用e返回其值 for(intj=pos;j L.elem[j-1]=L.elem[j]; L.length--;//当前长度减1, returntrue; } 实验结果如图(2-4)所示: 2-4将线性表中的一个元素删除 2.1.5(查位序1) 查找第一个与输入元素相同的值的位序 源代码: #include #include #defineLIST_INT_SIZE100//线性表示存储空间的初始分配量 typedefintElemType; structSqList//定义一个结构体类型 { ElemType*elem;//存储空间基地址 intlength;//当前长度 }; voidmain() { SqListLa; intx; ElemTypey; voidInitList(SqList*L);//构造线性表 voidOutList(SqList*L);//输出线性表 intLocateElem(SqList&L,int&pos,ElemTypee);//将元素插入线性表中,(,插入的位置,插入的元素) InitList(&La); printf("\n"); printf("请输入需查找的元素: "); scanf("%d",&y); LocateElem(La,x,y);//实现元素的查找 printf("输出第一个满足条件的元素的序位: %d",x); printf("\n"); } voidInitList(SqList*L)//构造一个空的线性表L { L->elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));//申请存储空间 printf("请输入长度: "); scanf("%d",&L->length); printf("请输入元素: "); for(inti=0;i scanf("%d",L->elem+i);//输入线性表中的元素 } intLocateElem(SqList&L,int&x,ElemTypee)//在顺序表中查找第一个与e值相同的元素,并输出其位序 { x=0; while(x =e) x++; if(x x=x+1; else x=-1; returnx; } 实验结果如图(2-5)所示: 2-5查找元素 2.1.6(查位序2) 查找元素所在的第一个元素 源代码: #include #include #defineLIST_INT_SIZE100//线性表示存储空间的初始分配量 typedefintElemType; structSqList//定义一个结构体类型 { ElemType*elem;//存储空间基地址 intlength;//当前长度 intlistsize;//当前分配的存储容量(以sizeof(ElemType))为单位 }; voidmain() { SqListLa; ElemTypee; voidInitList(SqList*L);//构造线性表 voidMergeList(SqList&L,ElemTypee);//顺序表的查找 InitList(&La); printf("\n"); printf("请输入需要查找的元素: "); scanf("%d",&e); MergeList(La,e); } voidInitList(SqList*L)//构造一个空的线性表L { L->elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));//申请存储空间 printf("请输入长度: "); scanf("%d",&L->length); printf("请输入元素: "); for(inti=0;i scanf("%d",L->elem+i);//输入线性表中的元素 } voidMergeList(SqList&L,ElemTypee) { //在线性顺序表L中查找第一个值与e满足compare()元素的序位 //若找到,则返回其在L中的序位,否则返回0 inti=0; intcompare(ElemType,ElemType); ElemType*p; p=L.elem; while(i<=L.length&&! (*compare)(*p++,e)) ++i; if(i<=L.length) printf("元素所在的第一个位置是: %d\n",i+1); else printf("不存在"); } intcompare(ElemTypea,ElemTypeb) { if(a==b) return1; else return0; } 2-6查找元素所在的第一个位置 2.1.7(不删除归并2) 将A、B线性表从小到大归并 源代码: #include #include #defineLIST_INT_SIZE100//线性表示存储空间的初始分配量 #defineOVERFLOW1 typedefintElemType; structSqList//定义一个结构体类型 { ElemType*elem;//存储空间基地址 intlength;//当前长度 intlistsize;//当前分配的存储容量(以sizeof(ElemType))为单位 }; voidmain() { SqListLa,Lb,Lc; voidInitList(SqList*L);//构造线性表 voidOutList(SqList*L);//输出线性表 voidLocateElem(SqListLa,SqListLb,SqList&Lc);//顺序表的合并 InitList(&La); printf("\n"); InitList(&Lb); LocateElem(La,Lb,Lc);//将两表合并为一表 printf("\n"); OutList(&Lc); printf("\n"); } voidInitList(SqList*L)//构造一个空的线性表L { L->elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));//申请存储空间 printf("请输入长度: "); scanf("%d",&L->length); printf("请输入元素: "); for(inti=0;i scanf("%d",L->elem+i);//输入线性表中的元素 } voidOutList(SqList*L)//输出线性表中的元素 { printf("输出C的元素为: "); for(inti=0;i printf("%d",*(L->elem+i)); } voidLocateElem(SqListLa,SqListLb,SqList&Lc)//合并顺序表 { ElemType*pa,*pb,*pc,*pa_last,*pb_last; pa=La.elem;//指针指向顺序表的首地址 pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length;//两表的长度 pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));//申请存储空间并指向首地址 if(! Lc.elem) exit(OVERFLOW); pa_last=La.elem+La.length-1;//计算顺序表的最后一位 pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last) { if(*pa<=*pb) *pc++=*pa++;//将A顺序表添加到C顺序表中 else *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++; while(pb<=pb_last) *pc++=*pb++; } 实验结果如图(2-6)所示: 2-7归并顺序表 2.2单链表 2.2.1(取元素) 在单链表中,取得第i个元素 源代码: #include #include #include #defineLIST_INT_SIZE100//线性表示存储空间的初始分配量 typedefintElemType; typedefstructLNode//线性表的单链表存储结构 { ElemTypedata;//数据域 LNode*next;//指针域 }LNode,*LinkList; voidmain() { LinkListLa; inti; ElemTypee; voidGreateList(LinkList&L);//构造单向链表 vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验