正文

练习:将有序顺序表归并为一个有序顺序表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);}

阅读(4031) | 评论(0)


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

评论

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