TTD-2016 2023-01-29 00:23 采纳率: 100%

# 已知线性表La和Lb中的数据元素按值非递减有序排列，现要求La和Lb归并排序为Lc 我想知道我这段rank中a和b表的元素为什么只传递了1和2给c，后续就不在执行了?

#include <stdio.h>

``````
#define MAX 100
typedef int Status;
int e;
typedef struct {
int data[MAX];
int length;
}Slist;
int insert(Slist *L, int i, int e) {
if (i<1 || i>L->length + 1)
return 0;
for (int j = L->length; j >= i; j--)
L->data[j] = L->data[j-1];
L->data[i - 1] = e;
L->length++;
return true;
}
Status GetElem(Slist* L, int i,int& e){
if (i<0 || i>L->length)
return 0;
e = L->data[i];
return e;
}
Status locate(Slist L,int e) {
for (int i = 0; i < L.length; i++)
if (L.data[i] == e)
return i + 1;
return 0;
}
int length(Slist L){
return L.length;
}
Status  rank(Slist a,Slist b ) {
int ea;
int eb;
Slist c{};
c.length = 0;
for (int k = 0; k < (a.length+b.length); k++) {
GetElem(&a, k, ea);
GetElem(&b, k, eb);
if (ea <= eb);
insert(&c, k+1, ea);
insert(&c, k+2, eb);
return 0;
}
}
int main() {
Slist La{};
La.length = 0;
Slist Lb{};
Slist Lc{};
Lb.length = 0;
Lc.length = 0;
insert(&La, 1, 1);
insert(&La, 2, 7);
insert(&La, 3, 8);
insert(&Lb, 1, 2);
insert(&Lb, 2, 4);
insert(&Lb, 3, 6);
insert(&Lb, 4, 8);
insert(&Lb, 5, 10);
insert(&Lb, 6, 11);
rank(La,Lb);
}
``````

rank函数的运行结果：

• 写回答

#### 3条回答默认 最新

• qzjhjxj 2023-01-29 09:42
关注

修改完善如下，供参考：

``````#include <stdio.h>
#define MAX 100
typedef int Status;
int e;
typedef struct {
int data[MAX];
int length;
}Slist;
int insert(Slist* L, int i, int e) {
if (i<1 || i>L->length + 1)
return 0;
for (int j = L->length; j >= i; j--)
L->data[j] = L->data[j - 1];
L->data[i - 1] = e;
L->length++;
return true;
}
Status GetElem(Slist* L, int i, int& e) {
if (i<0 || i>L->length)
return 0;
e = L->data[i];
return e;
}
Status locate(Slist L, int e) {
for (int i = 0; i < L.length; i++)
if (L.data[i] == e)
return i + 1;
return 0;
}
int length(Slist L) {
return L.length;
}
Status  rank(Slist a, Slist b, Slist* c) {  //修改
Status ea, eb, ia = 0, ib = 0, ic = 1;
while (ia < a.length && ib < b.length)
{
GetElem(&a, ia, ea);
GetElem(&b, ib, eb);
if (ea <= eb){
insert(c, ic, ea);
ia++;
}
else {
insert(c, ic, eb);
ib++;
}
ic++;
}
while (ia < a.length) {
GetElem(&a, ia, ea);
insert(c, ic, ea);
ia++; ic++;
}
while (ib < b.length) {
GetElem(&b, ib, eb);
insert(c, ic, eb);
ib++; ic++;
}
return 0;
//Slist c{};
//c.length = 0;
//for (int k = 0; k < (a.length + b.length); k++) {
//    GetElem(&a, k, ea);
//    GetElem(&b, k, eb);
//    if (ea <= eb);
//    insert(&c, k + 1, ea);
//    insert(&c, k + 2, eb);
//    return 0;
//}
}
void print(Slist L)   //修改
{
int i;
for (i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
}
int main() {
Slist La{};
La.length = 0;
Slist Lb{};
Lb.length = 0;
Slist Lc{};
Lc.length = 0;

insert(&La, 1, 1);
insert(&La, 2, 7);
insert(&La, 3, 8);
insert(&Lb, 1, 2);
insert(&Lb, 2, 4);
insert(&Lb, 3, 6);
insert(&Lb, 4, 8);
insert(&Lb, 5, 10);
insert(&Lb, 6, 11);

printf("La:");
print(La);
printf("Lb:");
print(Lb);

rank(La, Lb, &Lc);
printf("Lc:");
print(Lc);
return 0;
}

``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 2月8日
• 已采纳回答 1月31日
• 创建了问题 1月29日

#### 悬赏问题

• ¥15 信号处理中的凸优化问题
• ¥15 arm虚拟机无法和物理机互通
• ¥15 如何在此代码上增加一个统计学生生源的功能？(语言-c语言)
• ¥15 Android导航条遮盖异常
• ¥15 计算机网络技术基础问题
• ¥15 设置mac系统只能访问指定网站
• ¥15 西门子博途 s7 1200控制三台步进电机
• ¥15 基于非参数的方向距离函数求污染物影子价格(有偿)
• ¥15 vue+element 生成table
• ¥15 实验 4 FIFO 算法和 LRU 算法-C 程序实现