实验内容: 线性表 学号: 20085101021 怎么上传图片 姓名: 梁闪星补办身份证要多久 一、上机实验的问题和要求(需求分析) 2.线性表合并运算 两个数据元素按值非递减有序排列的线性表,要求将二者归并为一个新表,新表中的数据元素仍按值非递减有序排列。要求分别采用顺序和链式两种存储结构.。 二、程序设计的基本思想,原理和算法描述: 2.若采用顺序存储结构,首先动态分配一个线性表Lc,并使pa,pb,pc分别指向La,Lb,生死场读后感Lc的基址,然后算出La,Lb的长度,在pa,pb所指元素都在La,Lb中时,把其中较小的一个插入到Lc中,并使指向较小元素的指针和pc分别加1。直到其中一个线性表中的元素全部插入到Lc中,把另一个线性表中的剩余元素也顺序全部插入Lc中。 若采用链式存储结构,首先设立三个指针pa凉拌黄瓜胡萝卜,pb,pc,其中pa,pb分别指向La表和Lb表中当前待比较插入的结点,而pc指向Lc中的当前最后一个结点,若pa->data<=pb->data,则将pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之后。当一个为空时,说明有一个表的元素已归并完,则只要将另一个表的剩余段链接在pc所指结点之后即可。 三、调试和运行程序过程中产生的问题及采取的措施: 调用函数时,参数传递错误。通过一步一步调试根据提示进行修改。 四、源程序及注释 #include<stdio.h> #include<stdlib.h> #define INITSIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef int ElemType; typedef int Status; typedef struct{ 关于爱的古诗ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储量(以sizeof(ElemType)为单位) }SqList; Status InitList(SqList &L) {//构造一个空的顺序表L. L.elem=(ElemType*)malloc(100*sizeof(ElemType)); if(!L.elem)exit(OVERFLOW); L.length=0; L.listsize=INITSIZE; return(OK); } void Assign(SqList &L) {//为顺序表一个人的战役L的各元素赋值。 int i,N; printf("Plea input the Number of the SqList:"); scanf("%d",&N); printf("Plea input the elements:"); for(i=0;i<N;i++);{ scanf("%d",&L.elem[i]);宝宝洗澡水温 L.length++; } } void MergeList(SqList La,SqList Lb,SqList &Lc){ //已知线性表La和Lb中的数据元素按值非递减排列 //归并La和Lb得到新的线性表Lc,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++; el *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++;//插入La的剩余元素 湖南中小学教师发展网 while(pb<=pb_last) *pc++=*pb++;//插入Lb的剩余元素 }//MergeList_Sq void ListTraver(SqList L){ //遍历顺序表L int i; for(i=0;i<=L.length-1;i++); printf("%d ",L.elem[i]); printf("\n"); printf("the length is:%d\n",L.length); } void main(){ SqList L,L1,L2; InitList(L1); Assign(L1); InitList(L2); Assign(L2); MergeList(L1,L2,L); ListTraver( L); } 五、运行结果 Plea input the Number of the SqList:5 Plea input the elements:2 4 6 8 9 Plea input the Number of the SqList:8 Plea input the elements:1 3 5 12 34 36 41 46 1 2 3 4 5 6 8 9 12 34 36 41 46 the length is:13 |
本文发布于:2023-06-30 14:35:39,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/89/1061683.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |