回 帖 发 新 帖 刷新版面

主题:那里出错了

题目:设计合并函数ListMerge(L1, L2, L3),功能是把有序顺序表L1和L2中的数据元素合并到L3中,要求L3中的数据元素依然保持有序。并设计一个主函数验证该合并函数的正确性。

这是我写的,但最后运行不出来。
#include <stdio.h>
#define Maxsize 50
typedef int DataType;
typedef struct
{
    DataType list[Maxsize];
    int size;
}Seqlist;
#include "seqlist.h"

void main()
{
    Seqlist l1,l2,l3;
    int i=0;
    int a,b,c,d;
    listInitiate(&l1);
    printf("请输入第一个顺序表的元素,按'-1'回车结束;");
    scanf("%d",&a);
    while(a!=-1)
    {    
        l1.list[i]=a;
        i++;
        scanf("%d",&a);
    }
    l1.list[i]=-1;
    listInitiate(&l2);
    printf("请输入第二个顺序表的元素,按'-1'回车结束;");
    scanf("%d",&c);
    i=0;
    while(c!=-1)
    {    
        l2.list[i]=c;
        i++;
        scanf("%d",&c);
    }
    l2.list[i]=-1;    
    listInitiate(&l3);
    listAdd(&l1,&l2,&l3);

    
}
void listInitiate(Seqlist *l)
{
   l->size=0;
}

int listLength(Seqlist l)
{
   return l.size;
}

int listInsert(Seqlist *l,DataType x)
{
    int i,j=0;
      if(l->size>=Maxsize)
      {
          printf("满的");
          return 0;
      }
      else
      {while(x>l->list[i]&&i<l->size)
          i++;
        for(j=l->size;j>i;j--)
           l->list[j]=l->list[j-1];
           l->list[i]=x;
           l->size++;
           return 1;
       } 
}

int listGet(Seqlist l,int i,DataType *x)
{
   if(i<0&&i>l.size-1)
   {
       printf("参数i不合格!\n");
       return 0;
   }
   else
   {
       *x=l.list[i];
       return 1;
   }
}

void listAdd(Seqlist *l1,Seqlist *l2,Seqlist *l3)
{
   int i=0,j=0,k=0;

  
   while(l1->list[i]!=-1&&l2->list[j]!=-1)
   {
       if(l1->list[i]<l2->list[j])
         {
           l3->list[k]=l1->list[i];
           i++;
           k++;
         }
         else
          {
             l3->list[k]=l2->list[j];
             j++;
             k++;
          }
   }
     while(l1->list[i]!=-1)
     {
         l3->list[k]=l1->list[i];
         i++;
         k++;
     }
     while(l2->list[j]!=-1)
     {
         l3->list[k]=l2->list[j];
         j++;
         k++;
     }
 printf("%d",l3->list[k]);    
    
}

回复列表 (共8个回复)

沙发

printf("%d",l3->list[k]);    这里不对,你这里的k早就不是你想要的值了

板凳

#include <stdio.h>
#define Maxsize 50
typedef int DataType;
typedef struct Seqlist
{
    DataType list[Maxsize];
    int size;
}Seqlist;
/*
#include "seqlist.h"*/

void main()
{
    Seqlist l1,l2,l3;
    int i=0;
    int a,b,c,d;
    listInitiate(&l1);
    printf("请输入第一个顺序表的元素,按'-1'回车结束;");
    scanf("%d",&a);
    while(a!=-1)
    {
        l1.list[i]=a;
        i++;
        scanf("%d",&a);
        l1.size=i;
    }//l1.list[i]=-1;;
    /*
for(i=0;i<l1.size;i++)
     {
        printf("l1.list[%d]=%d\n",i,l1.list[i]);
     }
*/  listInitiate(&l2);
    printf("请输入第二个顺序表的元素,按'-1'回车结束;");
    scanf("%d",&c);
    i=0;
    while(c!=-1)
    {
        l2.list[i]=c;
        i++;
        scanf("%d",&c);
        l2.size=i;
    }//l2.list[i]=-1;
    /*
for(i=0;i<l2.size;i++)
     {
        printf("l2.list[%d]=%d\n",i,l2.list[i]);
     }*/
    listInitiate(&l3);
    listAdd(&l1,&l2,&l3);
    for(i=0;i<l3.size;i++)
     {
        printf("l3.list[%d]=%d\n",i,l3.list[i]);
     }


}
void listInitiate(Seqlist *l)
{
   l->size=0;
}

int listLength(Seqlist l)
{
   return l.size;
}

int listInsert(Seqlist *l,DataType x)
{
    int i,j=0;
      if(l->size>=Maxsize)
      {
          printf("满的");
          return 0;
      }
      else
      {while(x>l->list[i]&&i<l->size)
          i++;
        for(j=l->size;j>i;j--)
           l->list[j]=l->list[j-1];
           l->list[i]=x;
           l->size++;
           return 1;
       }
}

int listGet(Seqlist l,int i,DataType *x)
{
   if(i<0&&i>l.size-1)
   {
       printf("参数i不合格!\n");
       return 0;
   }
   else
   {
       *x=l.list[i];
       return 1;
   }
}

void listAdd(Seqlist *l1,Seqlist *l2,Seqlist *l3)
{
   int i=0,j=0,k=0;
   l3->size=0;
   while(i<l1->size&&j<l2->size)
   {
       if(l1->list[i]<l2->list[j])
         {
           l3->list[k]=l1->list[i];
           l3->size=l3->size+1;
           i++;
           k++;

         }
         else
          {
             l3->list[k]=l2->list[j];
             l3->size=l3->size+1;
             j++;
             k++;

          }
   }
     while(i<l1->size)
     {
         l3->list[k]=l1->list[i];l3->size=l3->size+1;
         i++;
         k++;

     }
     while(j<l2->size)
     {
         l3->list[k]=l2->list[j];l3->size=l3->size+1;
         j++;
         k++;

     }
 //printf("%d",l3->list[k]);
}
简单测试了一下,你没有对结构体里面的l.size赋值,修改了while的条件

3 楼


感谢楼上的回帖,不过我试了你的代码还是无法得到结果啊

4 楼

不会吧,我已经运行过了是正常的,不知道你用的什么编译器

5 楼


我是用vc6.0的

6 楼

找个c编辑器

7 楼


我下了个editplus。但用这怎么用使用它,跟运行这程序有什么关系!

8 楼

我的代码是直接在vc++6.0里打进去的

我来回复

您尚未登录,请登录后再回复。点此登录或注册