| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 434 人关注过本帖
标题:[求助]链表合并输出不对
只看楼主 加入收藏
末代小明
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-3-1
收藏
 问题点数:0 回复次数:4 
[求助]链表合并输出不对
代码如下,求大神指教:

#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int

typedef int Status;
typedef struct
{
    int *elem;
    int length;
    int listsize;
}SqList;

Status InitList_Sq(SqList *L)
{  // 算法2.3
  // 构造一个空的线性表L。
  L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
  if (!L->elem) return ERROR;        // 存储分配失败
  L->length = 0;                  // 空表长度为0
  L->listsize = LIST_INIT_SIZE;   // 初始存储容量
  return OK;
} // InitList_Sq

Status ListInsert_Sq(SqList *L, int i, ElemType e)
{  // 算法2.4
  // 在顺序线性表L的第i个元素之前插入新的元素e,
  // i的合法值为1≤i≤ListLength_Sq(L)+1
  ElemType *p;
  if (i < 1 || i > L->length+1) return ERROR;  // i值不合法
  if (L->length >= L->listsize) {   // 当前存储空间已满,增加容量
    ElemType *newbase = (ElemType *)realloc(L->elem,
                  (L->listsize+LISTINCREMENT)*sizeof (ElemType));
    if (!newbase) return ERROR;   // 存储分配失败
    L->elem = newbase;             // 新基址
    L->listsize += LISTINCREMENT;  // 增加存储容量
  }
  ElemType *q = &(L->elem[i-1]);   // q为插入位置
  for (p = &(L->elem[L->length-1]); p>=q; --p) *(p+1) = *p;
                                  // 插入位置及之后的元素右移
  *q = e;       // 插入e
  ++L->length;   // 表长增1
  return OK;
}
Status mergelistsq(SqList *la,SqList *lb,SqList *lc)
{
    ElemType *pa,*pb,*pc,*palast,*pblast;
    pa=la->elem;
    pb=lb->elem;
    lc->listsize=lc->length=la->length+lb->length;
    pc=lc->elem=(ElemType *)malloc(lc->listsize*sizeof(ElemType));
    if(!lc->elem) return ERROR;
    palast=la->length+la->elem-1;
    pblast=lb->length+lb->elem-1;
    while(pa<=palast&&pb<=pblast)
    {
        if(*pa<=*pb)
            *pc++=*pa++;
        else
            *pc++=*pb++;
    }
    while(pa<=palast)
    {
        *pc++=*pa++;
    }
    while(pb<=pblast)
    {
        *pc++=*pb++;
    }
    return OK;
}
void loadsq(SqList *l)
{
    int i;
    if(l->length==0) exit(1);
    for(i=0;i<l->length;i++)
    printf("%d ",l->elem[i]);
}
int main()
{
    int i,e,j=1;
    SqList la,lb,lc;
    scanf("%d",&i);
    while(i>0)
    {
        scanf("%d",&e);
        ListInsert_Sq(&la,j,e);
        j++;
        i--;
    }
    scanf("%d",&i);
    j=1;
    while(i>0)
    {
        scanf("%d",&e);
        ListInsert_Sq(&lb,j,e);
        i--;
        j++;
    }
    mergelistsq(&la,&lb,&lc);
    loadsq(&lc);
    return 1;
}
搜索更多相关主题的帖子: include return 线性表 
2014-03-01 23:51
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
你是想怎么个合并法儿?

报错又都是哪类错误?


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-03-02 00:39
末代小明
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-3-1
收藏
得分:0 
回复 2楼 蚕头燕尾
输入格式

第一行:顺序表A的元素个数
第二行:顺序表A的各元素(非递减),用空格分开
第三行:顺序表B的元素个数
第四行:顺序表B的各元素(非递减),用空格分开


输出格式

第一行:顺序表A的元素列表
第二行:顺序表B的元素列表
第三行:合并后顺序表C的元素列表


输入样例

5
1 3 5 7 9
5
2 4 6 8 10


输出样例

List A:1 3 5 7 9
List B:2 4 6 8 10
List C:1 2 3 4 5 6 7 8 9 10
2014-03-02 12:12
末代小明
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-3-1
收藏
得分:0 
回复 2楼 蚕头燕尾
错误return一个好大的数
2014-03-02 12:13
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
有一点我很不明白,你为什么非得把elem搞成个指针类型。。

看到这里我就不想往下看了。

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-03-06 21:27
快速回复:[求助]链表合并输出不对
数据加载中...
 
   



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

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