| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 436 人关注过本帖
标题:关于顺序表的合并。请问为什么我运行出来不能按照大小排序啊?
只看楼主 加入收藏
ps_ssa
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-4-14
收藏
 问题点数:0 回复次数:0 
关于顺序表的合并。请问为什么我运行出来不能按照大小排序啊?
/*【例2-3】有两个顺序表 A 和 B,其元素均按从小到大的升序排列,编写一个算法将它们合并成一个顺序表 C,要求 C 的元素也是从小到大排列。
算法的时间复杂度是O(A.length + B.length)*/

//顺序表的建立
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>


#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;

typedef struct std_info
{
    long int num;
    char name[8];
    float score;
} ElemType;

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct
{
    ElemType *elem;
    int length;
    int listsize;
} Sqlist;

int n;

/*定义功能选择菜单函数*/
void print()
{
    printf("----线性表(顺序结构)的基本操作----\n");
    printf("----------开始----------\n");
}
/*打印线性表(顺序结构)*/
void printout(Sqlist  *L)
{
    int  i;
    for(i=1; i<=L->listsize; i++)
        printf("   [%d]", i);
    printf("\n");
    for(i=0; i<L->listsize; i++)
        printf("%6d", L->elem[i]);
    printf("\n");
}

//初始化一个顺序表
Status InitList_sq(Sqlist&L)
{
    L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //what does it mean?
    if (!L.elem)
        exit(OVERFLOW);
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
    return OK;
}
/*02创建线性表(顺序结构)*/
void  creatlist_sq(Sqlist *L)
{
    int   i;
    int tmp;
    printf("请输入线性表中数据的个数:");
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        printf("data[%d]=", i);
        fflush(stdin);         /*清除掉键盘缓冲区*/
        scanf ("%d", &tmp);
        (L->elem[i]).num = tmp;
    }
    L->length=n;
}

/* 合并顺序表 */
// 已知顺序线性表La和Lb的元素按值非递减排列。
// 归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列。
void MergeList_sq(Sqlist La,Sqlist Lb,Sqlist &Lc)
{
    ElemType *pa,*pb,*pc,*pa_last,*pb_last;
    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)
        exit(OVERFLOW);
    pa_last=La.elem+La.length-1;
    pb_last=Lb.elem+Lb.length-1;
    while(pa<=pa_last&&pb<=pb_last)
    {
        //归并
        if((*pa).score<=(*pb).score)//错这里了!!!!!!!
            *pc++=*pa++;
        else
            *pc++=*pb++;
    }
    while(pa<=pa_last) *pc++=*pa++;
    while(pb<=pb_last) *pc++=*pb++;
}

void sortlist(Sqlist *L)
{
    int i,j,k;
    for (j=0; j<L->length-1; j++)
    {
        for(i=0; i<L->length-1-j; i++)
        {
            if( (L->elem[i]).num > (L->elem[i+1]).num )
            {
                k=(L->elem[i]).num;
                (L->elem[i]).num=(L->elem[i+1]).num;
                (L->elem[i+1]).num=k;
            }
        }
    }
}

void main()
{
    Sqlist La,Lb,Lc;
    int i;
    if(InitList_sq(La))
    {
        printf("输入顺序表La:\n");
        for(i=0; i<5; i++)
        {
            scanf("%d",&La.elem[i]);
            La.length++;
        }
        sortlist(&La);
    }
    if(InitList_sq(Lb))
    {
        printf("输入顺序表Lb:\n");
        for(i=0; i<5; i++)
        {
            scanf("%d",&Lb.elem[i]);
            Lb.length++;
        }
        sortlist(&Lb);
    }
    MergeList_sq(La,Lb,Lc);
    for(int j=0; j<Lc.length; j++)
    {
        printf("输出顺序表Lc:\n");
        printf("%d ",Lc.elem[j].num);
    }
    printf("\n");


}
搜索更多相关主题的帖子: include 元素 
2015-04-14 23:18
快速回复:关于顺序表的合并。请问为什么我运行出来不能按照大小排序啊?
数据加载中...
 
   



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

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