beannaeb 发表于 2020-9-26 20:58:20

线性表 新手求助,谢谢!!C\C++

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

有两个递增有序顺序表A和B,分别含有n和m个整数元素(最大的元素不超过32767),假设这n+m个元素均不相同.设计一个算法求n+m个元素中第k小的元素.如果参数k错误,算法返回0,否则算法返回1,并且用参数e表示求出的第k小的元素.

sunrise085 发表于 2020-9-26 21:38:48

什么语言?C语言还是python,还什么什么语言?
看着说线性表,是不是C语言啊?

beannaeb 发表于 2020-9-26 21:46:06

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

sunrise085 发表于 2020-9-26 21:38
什么语言?C语言还是python,还什么什么语言?
看着说线性表,是不是C语言啊?

C语言

sunrise085 发表于 2020-9-26 21:58:04

beannaeb 发表于 2020-9-26 21:46
C语言

你的线性表打算用什么来做?单链表,还是双向链表?链表什么形式?你一点都没有写吗??
直接来求作业的?
你若给出你的线性表的形式,让别人帮你写一下这个查找函数,那还可行。但是你什么也没有,那每个人写出来的可能会有很大的差别哎。需要先帮你写一个链表,然后再写这个函数。。。

beannaeb 发表于 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;
        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;
        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=L.data;
        L.data=x;
        L.length++;
        return 1;
}       
        void DispList(SqList L)
{
        int i;
        for (i=0;i<L.length;i++)
        printf("%d",L.data);
        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:INF);
                int y=(j<B.length?B.data: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;
}

sunrise085 发表于 2020-9-26 22:08:56

beannaeb 发表于 2020-9-26 22:06
作业题,自己写的最后运行结果有问题
#include
#define MaxSize 100


请以代码的形式发代码
不会发代码,请看这里
你的 线性表可以正常运行吗

beannaeb 发表于 2020-9-26 22:11:40

sunrise085 发表于 2020-9-26 22:08
请以代码的形式发代码
不会发代码,请看这里
你的 线性表可以正常运行吗

运行可以,但是结果有问题

beannaeb 发表于 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;
        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;
        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=L.data;
        L.data=x;
        L.length++;
        return 1;
}       
        void DispList(SqList L)
{
        int i;
        for (i=0;i<L.length;i++)
        printf("%d",L.data);
        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:INF);
                int y=(j<B.length?B.data: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;
}

sunrise085 发表于 2020-9-26 22:20:09

本帖最后由 sunrise085 于 2020-9-26 22:40 编辑

beannaeb 发表于 2020-9-26 22:12

你的程序没什么大问题,就是93行写的不对。函数调用怎么这么写?printf中两个格式化字符,但是后面只给了一个变量k
#include<stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
      ElemType data;
      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;
      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=L.data;
      L.data=x;
      L.length++;
      return 1;
}      
      void DispList(SqList L)
{
      int i;
      for (i=0;i<L.length;i++)
      printf("%d ",L.data);
      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:INF);
                int y=(j<B.length?B.data: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或者超出两个列表的长度总和!");
}

beannaeb 发表于 2020-9-26 22:37:19

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

k怎么改结果都是设置错误

sunrise085 发表于 2020-9-26 22:39:39

beannaeb 发表于 2020-9-26 22:37
k怎么改结果都是设置错误


哦,忘了。我测试的时候直接在第96行把k改成13了,忘记改回k了。。
现在改回去了

beannaeb 发表于 2020-9-26 22:44:49

sunrise085 发表于 2020-9-26 22:39
哦,忘了。我测试的时候直接在第96行把k改成13了,忘记改回k了。。
现在改回去了

哦,谢谢

sunrise085 发表于 2020-9-26 22:46:14

beannaeb 发表于 2020-9-26 22:44
哦,谢谢

若问题解决了,请给评个最佳
页: [1]
查看完整版本: 线性表 新手求助,谢谢!!C\C++