| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1812 人关注过本帖
标题:将两个顺序表合为一个顺序表,但是为什么输出的是地址0.0请教
只看楼主 加入收藏
卜算子
Rank: 1
等 级:新手上路
帖 子:86
专家分:8
注 册:2016-9-18
结帖率:82.35%
收藏
 问题点数:0 回复次数:6 
将两个顺序表合为一个顺序表,但是为什么输出的是地址0.0请教
//是按照非递减顺序来的//
#include <stdio.h>
#include <malloc.h>
#define N 5
#define M 10
typedef struct
{
    int data[N];
}a;
typedef struct
{
    int data[N];
}b;
typedef struct
{
    int data[M];
}c;

void Initlist(a *L1,b *L2,c *L)
{
    int i=0,j=0,t=0,p=0;
    L1=(a *)malloc(sizeof(a));
    L2=(b *)malloc(sizeof(b));
    L=(c *)malloc(sizeof(c));
     for(i=0;i<N;i++)
     {
         scanf("%3d",&L1->data[i]);
     }
     for(j=0;j<N;j++)
     {
         scanf("%3d",&L2->data[j]);
     }
     for(i=0;i<N-1;i++)
     {
         for(j=0;j<N-1;j++)
         {
             if(L1->data[j]<L1->data[j])
             {
                 t=L1->data[j];
                 L1->data[j]=L1->data[j+1];
                 L1->data[j+1]=t;
             }
         }
     }

   
     for(i=0;i<N-1;i++)
     {
         for(j=0;j<N-1;j++)
         {
             if(L2->data[j]<L1->data[j])
             {
                 t=L2->data[j];
                 L2->data[j]=L2->data[j+1];
                 L2->data[j+1]=t;
             }
         }
     }
     while(L->data[0]!='/0')
     {
         p=M;
        if(L1->data[i]>L2->data[i])
        {
            L->data[M]=L1->data[i];
        }
        else if(L1->data[i]<L2->data[i])
        {

            L->data[p]=L2->data[i];
        }
        p--;
        i++;
        if(i==N)
        {
            break;
        }
     }
     for(i=0;i<M;i++)
     {
         printf("%3d",L->data[i]);
     }
}
main()
{
    a *L1;
    b *L2;
    c *L;
    Initlist(L1,L2,L);
    getchar();
    getchar();                                                                        
}



[此贴子已经被作者于2016-12-6 09:34编辑过]

搜索更多相关主题的帖子: include 
2016-12-06 09:31
卜算子
Rank: 1
等 级:新手上路
帖 子:86
专家分:8
注 册:2016-9-18
收藏
得分:0 
我好像看到错误了0.0,抱歉,浪费各位时间了

岂曰无衣,与子同袍!
2016-12-06 09:37
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
为啥不先合再排序?
这里都内存溢出了,并且也不能达到合一的目的。
 if(L1->data[i]>L2->data[i])
         {
             L->data[M]=L1->data[i];
         }
         else if(L1->data[i]<L2->data[i])
         {

             L->data[p]=L2->data[i];
         }
2016-12-06 09:41
卜算子
Rank: 1
等 级:新手上路
帖 子:86
专家分:8
注 册:2016-9-18
收藏
得分:0 
回复 3楼 grmmylbs
对的,就是这里出了问题,并没有完全合并,而且排序也有问题谢谢你的回答,不过内存怎么会溢出?没搞懂,

岂曰无衣,与子同袍!
2016-12-06 09:51
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
定义data[10]的下标只能用0~9,你给p赋值10,data[10]就会溢出了
2016-12-06 09:55
卜算子
Rank: 1
等 级:新手上路
帖 子:86
专家分:8
注 册:2016-9-18
收藏
得分:0 
回复 5楼 grmmylbs
对哦!机智如我居然没有看出来,惭愧,0.0可是前面结贴了,有其他方法给你分吗?

岂曰无衣,与子同袍!
2016-12-06 17:54
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
写法可以规范一下~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N 5
#define M 2*N
typedef struct Node_1
{
    int a[N];
}Node_1;
typedef struct Node_2
{
    int a[N];
}Node_2;
typedef struct Node_3
{
    int a[M];
}Node_3;

static enum Node{ByNode_1,ByNode_2,ByNode_3};

void creat(void **p,enum Node n)
{
    switch(n)
    {
        case ByNode_1:*p=(Node_1*)malloc(sizeof(Node_1));break;
        case ByNode_2:*p=(Node_2*)malloc(sizeof(Node_2));break;
        case ByNode_3:*p=(Node_3*)malloc(sizeof(Node_3));break;
    }
}

void input(Node_1 *L1,Node_2 *L2)
{
    int i;
    
    for (i=0;i<N;i++)
        scanf("%3d",&L1->a[i]);

    for (i=0;i<N;i++)
        scanf("%3d",&L2->a[i]);
}

void Link(Node_1 *L1,Node_2 *L2,Node_3 *L3)
{
    int i,j;

    for (i=0;i<N;i++)
    {
        L3->a[i]=L1->a[i];
        L3->a[M-1-i]=L2->a[i];
    }

    for (i=0;i<M;i++)
        for (j=0;j<M-1-i;j++)
            if (L3->a[j]<L3->a[j+1])
            {
                L3->a[j]^=L3->a[j+1];
                L3->a[j+1]^=L3->a[j];
                L3->a[j]^=L3->a[j+1];
            }
}

void output(Node_3 *L3)
{
    int i;
    for (i=0;i<M;i++)
        printf("%d ",L3->a[i]);

    printf("\n");
}

int main()
{

    Node_1 *L1=NULL;
    Node_2 *L2=NULL;
    Node_3 *L3=NULL;
    
    creat(&L1,ByNode_1);
    creat(&L2,ByNode_2);
    creat(&L3,ByNode_3);

    input(L1,L2);
    Link(L1,L2,L3);
    output(L3);

    free(L1);
    free(L2);
    free(L3);

    return 0;
}



[此贴子已经被作者于2016-12-7 02:26编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-07 01:54
快速回复:将两个顺序表合为一个顺序表,但是为什么输出的是地址0.0请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041081 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved