正文

练习:将有序顺序表归并为一个有序顺序表2006-05-31 02:52:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/15235.html

分享到:

/*实验2  顺序表其它操作

实验目的

1.进一步掌握在线性表的顺序存储结构上的一些其它操作。

实验内容

程序2

已知两个非递减有序的线性表LA和LB,将LA和LB合并成一个线性表LC,LC也非递减有序。
*/


#include <iostream>
#include <cstdio>
using namespace std;

#define ElemType int
#define MAXSIZE 100

//顺序表的操作
/* 顺序存储类型 */
typedef struct
{ElemType data[MAXSIZE]; /*存放线性表的数组*/
 int length;               /* length是顺序表的长度*/
}SeqList;

/* 初始化顺序表 */
SeqList SeqListInit( )
{SeqList L;
 L.length=0;
 return L;
 }


/* 求顺序表长度 */
int ListLength(SeqList L)
 {return(L.length);}

/* 遍历顺序表 */
void ListTraverse(SeqList L)
{int i;
 if(L.length<=0) printf("顺序表为空\n");
 else {printf("当前顺序表中的元素为:\n");
       for(i=1;i<=L.length;i++) printf("%d ",L.data[i-1]);
        printf("\n");
 }
}

/* 向顺序表中插入元素 */
SeqList ListInsert(SeqList L,int i,ElemType x)
{int j;
 if(L.length==MAXSIZE)
     printf("表满,不能插入\n");
 else  if(i<1||i>L.length+1)
     printf("插入位置不正确\n");
       else { 
           for(j=L.length-1;j>=i-1;j--)
               L.data[j+1]=L.data[j];
          L.data[i-1]=x;
          L.length++;
          }
 return L;
 }

/* 从顺序表中删除元素 */
SeqList ListDelete(SeqList L,int i)
{int j;ElemType x;
 if (i<1||i>L.length)
    printf("删除位置不正确\n");
 else {x=L.data[i-1];
         for(j=i;j<=L.length-1;j++)
         L.data[j-1]=L.data[j];
         L.length--;
         printf("%d已被删除\n",x);
         }
 return L;
}

//实验内容
SeqList MergeSeqList(SeqList La,SeqList Lb)  /*合并顺序表*/ 
{
    int i=0;
    int j=0;

    SeqList Lc;
    Lc=SeqListInit();
    if((ListLength(La)+ListLength(Lb))>MAXSIZE)
    {
        printf("Lc中的元素个数将超界,无法合并\n");
        return Lc;
    }
    for(i=1,j=1;(i<=La.length)&&(j<=Lb.length);)
    {
        if(La.data[i-1]<=Lb.data[j-1])
        {
            Lc=ListInsert(Lc,i+j-1,La.data[i-1]);
            i++;
        }
        else //(La.data[i-1]>Lb.data[j-1])
        {
            Lc=ListInsert(Lc,i+j-1,Lb.data[j-1]);
            j++;
        }
}
    if(i<La.length)
        for(;i<=La.length;i++)
            Lc=ListInsert(Lc,i+j-1,La.data[i-1]);
    else if(j<=Lb.length)
        for(;j<=Lb.length;j++)
            Lc=ListInsert(Lc,i+j-1,Lb.data[j-1]);
    return Lc;
}

void main()
{
    int i,j;
    SeqList Lc,La,Lb;
    La=SeqListInit();
    Lb=SeqListInit();
    Lc=SeqListInit();
    for(i=0;i<100;i=i+2)
        La=ListInsert(La,i/2+1,i);
    for(j=1;j<100;j=j+2)
        Lb=ListInsert(Lb,j/2+1,j);
    Lc=MergeSeqList(La,Lb);
    ListTraverse(Lc);
}

阅读(3887) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册