#include "iostream" using namespace std; #define MAXSIZE 100 typedef struct { int *elem; //存储空间基地址 int length; //表长 }SqList; void CreatList(SqList &L){ //创建表 int a,i=0; L.elem = new int[MAXSIZE]; L.length = 0; cin>>a; while (a!=-1){ if(L.length == MAXSIZE){ cout<<"顺序表已满"; } else{ L.elem[i++] = a; L.length++; cin>>a; } } } bool GetElem(SqList L,int i,int &e){ //取值 if(i<1 || i>L.length+1) return false; e = L.elem[i-1]; return true; } int LocateList(SqList L,int e){ //查找 for (int i = 0; i < L.length; ++i) { if(L.elem[i] == e) return i+1; return -1; } } void InsertList(SqList &L,int i,int e){ //插入 if(i<1 || i>L.length+1) cout<<"错误"; else if(L.length == MAXSIZE) cout<<"错误"; else{ for(int j = L.length-1;j>=i-1;j--) L.elem[j+1] == L.elem[j]; L.elem[i-1] = e; L.length++; } } void MergeList(SqList &A, SqList B, SqList &C){ //合并 //已知顺序表A、B的元素按值非递减排列 int *pa,*pb,*pc,*pa_last,*pb_last; C.length = A.length + B.length; C.elem = new int[C.length]; pa = A.elem; pb = B.elem; pc = C.elem; //指针分别指向表的首元素 pa_last = A.elem + A.length-1; //指针指向表的最后一个元素 pb_last = B.elem + B.length-1; while((pa <= pa_last) && (pb <= pb_last)){ if (*pa < *pb) *pc++ = *pa++; else *pc++ = *pb++; } while (pa <= pa_last) *pc++ = *pa++; //表B已到表尾,将A中元素插入到C中 while (pb <= pb_last) *pc++ = *pb++; //表A已到表尾,将B中元素插入到C中 } void print(SqList L){ //输出表 for (int i = 0; i < L.length; ++i) cout<<L.elem[i]<<" "; cout<<endl; } int main(){ SqList LA,LB,LC; int i,e; cout<<"创建表A(输入-1结束):"<<endl; CreatList(LA); cout<<"创建表B(输入-1结束):"<<endl; CreatList(LB); MergeList(LA,LB,LC); cout<<"合并结果:"<<endl; print(LC); return 0; }给我详细讲讲这段代码
时间: 2024-04-28 19:23:07 浏览: 136
#include_iostream.h_
4星 · 用户满意度95%
这段代码是一个用 C++ 实现的顺序表合并程序。顺序表是一种线性表,其元素存储在一段连续的存储空间中,可以通过下标随机访问元素。顺序表合并即将两个有序的顺序表合并成一个有序的顺序表。
代码中定义了一个结构体 `SqList`,用来表示顺序表,包含了存储空间基地址 `elem` 和表长 `length` 两个成员变量。其中 `elem` 是一个指向整型数组的指针,用来存储顺序表的元素;`length` 表示顺序表的长度。
函数 `CreatList` 是用来创建顺序表的,首先输入一个整数 `a`,如果 `a` 不等于 -1,则将其插入到顺序表中,否则结束输入。如果顺序表已满,则输出错误信息。
函数 `GetElem` 是用来取出顺序表中第 `i` 个元素的值,并将其存储在 `e` 中。如果 `i` 的值不合法,则返回 `false`,否则返回 `true`。
函数 `LocateList` 是用来查找顺序表中是否有值为 `e` 的元素,如果存在,则返回其在顺序表中的位置(下标从 1 开始),否则返回 -1。
函数 `InsertList` 是用来在顺序表的第 `i` 个位置插入一个值为 `e` 的元素。如果插入位置不合法或顺序表已满,则输出错误信息。
函数 `MergeList` 是用来合并两个有序的顺序表 `A` 和 `B`,并将结果存储在顺序表 `C` 中。具体实现是通过遍历顺序表 `A` 和 `B`,比较相应位置的元素大小,将较小的元素插入到顺序表 `C` 中。当其中一个顺序表遍历完后,将另一个顺序表中的剩余元素插入到顺序表 `C` 中。需要注意的是,这里采用了指针操作,可以有效地节省空间和时间。
函数 `print` 是用来输出顺序表的元素。
在 `main` 函数中,先分别创建了两个顺序表 `LA` 和 `LB`,然后调用函数 `MergeList` 将其合并成一个新的顺序表 `LC`,最后调用函数 `print` 输出合并结果。
阅读全文