鱼C论坛

 找回密码
 立即注册
查看: 2123|回复: 12

[已解决]线性表 新手求助,谢谢!!C\C++

[复制链接]
发表于 2020-9-26 20:58:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 beannaeb 于 2020-9-26 21:48 编辑

有两个递增有序顺序表A和B,分别含有n和m个整数元素(最大的元素不超过32767),假设这n+m个元素均不相同.设计一个算法求n+m个元素中第k小的元素.如果参数k错误,算法返回0,否则算法返回1,并且用参数e表示求出的第k小的元素.
最佳答案
2020-9-26 22:20:09
本帖最后由 sunrise085 于 2020-9-26 22:40 编辑

你的程序没什么大问题,就是93行写的不对。函数调用怎么这么写?printf中两个格式化字符,但是后面只给了一个变量k
#include<stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
        ElemType data[MaxSize];
        int length;
}SqList;
        void InitList(SqList &L)
{
        L.length=0;
}
        int GetElem(SqList L,int i,ElemType &e)
{
        if(i<1||i>L.length)
        return 0;
        else
        {
        e=L.data[i-1];
        return 1;
        }
}
        int InsElem(SqList&L,ElemType x,int i)
{
        int j;
        if(i<1||i>L.length+1)
        return 0;
        for (j=L.length;j>i;j--)
        L.data[j]=L.data[j-1];
        L.data[i-1]=x;
        L.length++;
        return 1;
}        
        void DispList(SqList L)
{
        int i;
        for (i=0;i<L.length;i++)
        printf("%d ",L.data[i]);
        printf("\n");
}
#define INF 32767
int Topk2(SqList A,SqList B,int k,ElemType&e)
{
        int i=0,j=0;
        if(k<1||k>A.length+B.length)
        return 0;
        while(true)
        {
                k--;
                int x=(i<A.length?A.data[i]:INF);
                int y=(j<B.length?B.data[j]:INF);
                if(x<y)
                {
                        if(k==0)
                        {
                                e=x;
                                return 1;
                        }
                        i++;
                }
                else
                {
                        if(k==0)
                        {
                                e=y;
                                return 1;
                         } 
                         j++;
                } 
        }
}
int main()
{
        int k=2,flag;
        ElemType e;
        SqList A;
        SqList B;
        InitList(A);
        InitList(B);
        InsElem(A,1,1);
        InsElem(A,2,2);
        InsElem(A,3,3);
        InsElem(A,4,4);
        InsElem(A,5,5);
        InsElem(A,6,6);
        InsElem(B,7,1);
        InsElem(B,8,2);
        InsElem(B,9,3);
        InsElem(B,10,4);
        InsElem(B,11,5);
        InsElem(B,12,6);
        printf("线性表A:");
        DispList(A);
        printf("线性表B:");
        DispList(B);
        flag=Topk2(A,B,k,e);//调用函数Topk2,得到元素e,若flag为0,说明k参数不对,没找到。
        if (flag)
            printf("第%d小元素为:%d\n",k,e);
        else
        printf("参数k设置错误,k小于1或者超出两个列表的长度总和!");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-26 21:38:48 | 显示全部楼层
什么语言?C语言还是python,还什么什么语言?
看着说线性表,是不是C语言啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 21:46:06 | 显示全部楼层
本帖最后由 beannaeb 于 2020-9-26 21:47 编辑
sunrise085 发表于 2020-9-26 21:38
什么语言?C语言还是python,还什么什么语言?
看着说线性表,是不是C语言啊?


C语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 21:58:04 | 显示全部楼层

你的线性表打算用什么来做?单链表,还是双向链表?链表什么形式?你一点都没有写吗??
直接来求作业的?
你若给出你的线性表的形式,让别人帮你写一下这个查找函数,那还可行。但是你什么也没有,那每个人写出来的可能会有很大的差别哎。需要先帮你写一个链表,然后再写这个函数。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 22:06:48 | 显示全部楼层
sunrise085 发表于 2020-9-26 21:58
你的线性表打算用什么来做?单链表,还是双向链表?链表什么形式?你一点都没有写吗??
直接来求作业的 ...

作业题,自己写的最后运行结果有问题
#include<stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
        ElemType data[MaxSize];
        int length;
}SqList;
        void InitList(SqList &L)
{
        L.length=0;
}
        int GetElem(SqList L,int i,ElemType &e)
{
        if(i<1||i>L.length)
        return 0;
        else
        {
        e=L.data[i-1];
        return 1;
        }
}
        int InsElem(SqList&L,ElemType x,int i)
{
        int j;
        if(i<1||i>L.length+1)
        return 0;
        for (j=L.length;j>i;j--)
        L.data[j]=L.data[j-1];
        L.data[i-1]=x;
        L.length++;
        return 1;
}       
        void DispList(SqList L)
{
        int i;
        for (i=0;i<L.length;i++)
        printf("%d",L.data[i]);
        printf("\n");
}
#define INF 32767
int Topk2(SqList A,SqList B,int k,ElemType&e)
{
        int i=0,j=0;
        if(k<1||k>A.length+B.length)
        return 0;
        while(true)
        {
                k--;
                int x=(i<A.length?A.data[i]:INF);
                int y=(j<B.length?B.data[j]:INF);
                if(x<y)
                {
                        if(k==0)
                        {
                                e=x;
                                return 1;
                        }
                        i++;
                }
                else
                {
                        if(k==0)
                        {
                                e=y;
                                return 1;
                         }
                         j++;
                }
        }
}
int main()
{
        int k=2;ElemType e;
        SqList A;
        SqList B;
        InitList(A);
        InitList(B);
        InsElem(A,1,1);
        InsElem(A,2,2);
        InsElem(A,3,3);
        InsElem(A,4,4);
        InsElem(A,5,5);
        InsElem(A,6,6);
        InsElem(B,7,1);
        InsElem(B,8,2);
        InsElem(B,9,3);
        InsElem(B,10,4);
        InsElem(B,11,5);
        InsElem(B,12,6);
        printf("线性表A:");DispList(A);
        printf("线性表B:");DispList(B);
        printf("第%d小元素为:%d\n",k);Topk2;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 22:08:56 | 显示全部楼层
beannaeb 发表于 2020-9-26 22:06
作业题,自己写的最后运行结果有问题
#include
#define MaxSize 100


请以代码的形式发代码
不会发代码,请看这里
你的 线性表可以正常运行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 22:11:40 | 显示全部楼层
sunrise085 发表于 2020-9-26 22:08
请以代码的形式发代码
不会发代码,请看这里
你的 线性表可以正常运行吗

运行可以,但是结果有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 22:12:28 | 显示全部楼层
beannaeb 发表于 2020-9-26 22:11
运行可以,但是结果有问题
#include<stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
        ElemType data[MaxSize];
        int length;
}SqList;
        void InitList(SqList &L)
{
        L.length=0;
}
        int GetElem(SqList L,int i,ElemType &e)
{
        if(i<1||i>L.length)
        return 0;
        else
        {
        e=L.data[i-1];
        return 1;
        }
}
        int InsElem(SqList&L,ElemType x,int i)
{
        int j;
        if(i<1||i>L.length+1)
        return 0;
        for (j=L.length;j>i;j--)
        L.data[j]=L.data[j-1];
        L.data[i-1]=x;
        L.length++;
        return 1;
}        
        void DispList(SqList L)
{
        int i;
        for (i=0;i<L.length;i++)
        printf("%d",L.data[i]);
        printf("\n");
}
#define INF 32767
int Topk2(SqList A,SqList B,int k,ElemType&e)
{
        int i=0,j=0;
        if(k<1||k>A.length+B.length)
        return 0;
        while(true)
        {
                k--;
                int x=(i<A.length?A.data[i]:INF);
                int y=(j<B.length?B.data[j]:INF);
                if(x<y)
                {
                        if(k==0)
                        {
                                e=x;
                                return 1;
                        }
                        i++;
                }
                else
                {
                        if(k==0)
                        {
                                e=y;
                                return 1;
                         } 
                         j++;
                } 
        }
}
int main()
{
        int k=2;ElemType e;
        SqList A;
        SqList B;
        InitList(A);
        InitList(B);
        InsElem(A,1,1);
        InsElem(A,2,2);
        InsElem(A,3,3);
        InsElem(A,4,4);
        InsElem(A,5,5);
        InsElem(A,6,6);
        InsElem(B,7,1);
        InsElem(B,8,2);
        InsElem(B,9,3);
        InsElem(B,10,4);
        InsElem(B,11,5);
        InsElem(B,12,6);
        printf("线性表A:");DispList(A);
        printf("线性表B:");DispList(B);
        printf("第%d小元素为:%d\n",k);Topk2;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 22:20:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-9-26 22:40 编辑

你的程序没什么大问题,就是93行写的不对。函数调用怎么这么写?printf中两个格式化字符,但是后面只给了一个变量k
#include<stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
        ElemType data[MaxSize];
        int length;
}SqList;
        void InitList(SqList &L)
{
        L.length=0;
}
        int GetElem(SqList L,int i,ElemType &e)
{
        if(i<1||i>L.length)
        return 0;
        else
        {
        e=L.data[i-1];
        return 1;
        }
}
        int InsElem(SqList&L,ElemType x,int i)
{
        int j;
        if(i<1||i>L.length+1)
        return 0;
        for (j=L.length;j>i;j--)
        L.data[j]=L.data[j-1];
        L.data[i-1]=x;
        L.length++;
        return 1;
}        
        void DispList(SqList L)
{
        int i;
        for (i=0;i<L.length;i++)
        printf("%d ",L.data[i]);
        printf("\n");
}
#define INF 32767
int Topk2(SqList A,SqList B,int k,ElemType&e)
{
        int i=0,j=0;
        if(k<1||k>A.length+B.length)
        return 0;
        while(true)
        {
                k--;
                int x=(i<A.length?A.data[i]:INF);
                int y=(j<B.length?B.data[j]:INF);
                if(x<y)
                {
                        if(k==0)
                        {
                                e=x;
                                return 1;
                        }
                        i++;
                }
                else
                {
                        if(k==0)
                        {
                                e=y;
                                return 1;
                         } 
                         j++;
                } 
        }
}
int main()
{
        int k=2,flag;
        ElemType e;
        SqList A;
        SqList B;
        InitList(A);
        InitList(B);
        InsElem(A,1,1);
        InsElem(A,2,2);
        InsElem(A,3,3);
        InsElem(A,4,4);
        InsElem(A,5,5);
        InsElem(A,6,6);
        InsElem(B,7,1);
        InsElem(B,8,2);
        InsElem(B,9,3);
        InsElem(B,10,4);
        InsElem(B,11,5);
        InsElem(B,12,6);
        printf("线性表A:");
        DispList(A);
        printf("线性表B:");
        DispList(B);
        flag=Topk2(A,B,k,e);//调用函数Topk2,得到元素e,若flag为0,说明k参数不对,没找到。
        if (flag)
            printf("第%d小元素为:%d\n",k,e);
        else
        printf("参数k设置错误,k小于1或者超出两个列表的长度总和!");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 22:37:19 | 显示全部楼层
sunrise085 发表于 2020-9-26 22:20
你的程序没什么大问题,就是93行写的不对。函数调用怎么这么写?printf中两个格式化字符,但是后面只给了 ...

k怎么改结果都是设置错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 22:39:39 | 显示全部楼层
beannaeb 发表于 2020-9-26 22:37
k怎么改结果都是设置错误



哦,忘了。我测试的时候直接在第96行把k改成13了,忘记改回k了。。
现在改回去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-26 22:44:49 | 显示全部楼层
sunrise085 发表于 2020-9-26 22:39
哦,忘了。我测试的时候直接在第96行把k改成13了,忘记改回k了。。
现在改回去了

哦,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 22:46:14 | 显示全部楼层

若问题解决了,请给评个最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 02:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表