• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天之道

            享受編程的樂趣。
            posts - 118, comments - 7, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            歸并兩個線性表得到新的線性表

            Posted on 2012-08-21 21:51 hoshelly 閱讀(306) 評論(0)  編輯 收藏 引用 所屬分類: DS && Algorithm
            #include<stdio.h>
            #include<stdlib.h>
            #define LIST_INIT_SIZE 100
            #define LISTINCREMENT 10
            #define OK 1
            #define ERROR 0
            #define OVERFLOW -1
            typedef int ElemType;
            typedef int Status;
            typedef struct {
                ElemType *elem; //存儲空間基址
                int length; //當前的線性表長度
                int listsize; //當前分配的存儲容量
            }SqList;

            //初始化線性表
            Status InitList_Sq(SqList *L) //用線性表的指針操作
            {
                (*L).elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
                if(!(*L).elem) exit(OVERFLOW);
                (*L).length=0;
                (*L).listsize=LIST_INIT_SIZE;
                return OK;
            }
            int ListLength(SqList L)
            {
                return L.length;
            }

            Status GetElem(SqList L,int i,ElemType *e)
            {
                if(i<1 || i>L.length)
                    exit(ERROR);
                *e=*(L.elem+i-1);
                return OK;
            }

            Status ListInsert(SqList *L,int i,ElemType e)
            {
                ElemType *newbase,*p,*q;
                if(i<1 || i>(*L).length+1)
                    return ERROR;
                if((*L).length >= (*L).listsize)
                {
                    newbase=(ElemType *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(ElemType));
                    if(!newbase) exit(OVERFLOW);
                    (*L).elem=newbase;
                    (*L).listsize +=LISTINCREMENT;
                }
                q=(*L).elem+i-1; //插入位置
                for(p=(*L).elem+(*L).length-1;p>=q;--p)
                    *(p+1)=*p;
                *q=e;
                ++(*L).length;
                return OK;
            }

            Status Visit(ElemType *c)
            {
                printf("%d ",*c);
                return OK;
            }

            Status ListTraverse(SqList L)
            {
                int i;
                for(i=0;i<L.length;i++)
                    Visit(L.elem+i);
                printf("\n");
                return OK;
            }


            void MergeList(SqList La,SqList Lb,SqList *Lc) //歸并線性表La和Lb得到新的線性表Lc,Lc的數據元素安置遞減排列
            {
                int i=1,j=1,k=0;
                int La_len,Lb_len;
                ElemType ai,bj;
                InitList_Sq(Lc);
                La_len=ListLength(La);
                Lb_len=ListLength(Lb);
                while((i<=La_len) && (j<=Lb_len)) //如果表La和表Lb都非空
                {
                    GetElem(La,i,&ai);
                    GetElem(Lb,j,&bj);
                    if(ai<=bj)
                    {
                        ListInsert(Lc,++k,ai); ++i;
                    }
                    else
                    {
                        ListInsert(Lc,++k,bj); ++j;
                    }
                }

                while(i<=La_len)  //如果只有La非空
                {
                    GetElem(La,i++,&ai);
                    ListInsert(Lc,++k,ai);
                }

                while(j<=Lb_len)
                {
                    GetElem(Lb,j++,&bj);
                    ListInsert(Lc,++k,bj);
                }
            }
            int main()
            {
                SqList La,Lb,Lc;
                int j,a[4]={3,5,8,11},b[7]={2,6,8,9,11,15,20};
                InitList_Sq(&La);
                for(j=1;j<=4;j++)
                    ListInsert(&La,j,a[j-1]);
                printf("print La: \n");
                ListTraverse(La);
                
                InitList_Sq(&Lb);
                for(j=1;j<=7;j++)
                    ListInsert(&Lb,j,b[j-1]);
                printf("print Lb: \n");
                ListTraverse(Lb);

                MergeList(La,Lb,&Lc);

                printf("print Lc: \n");
                ListTraverse(Lc);

                return 0;
            }
            久久久久99精品成人片三人毛片 | 色欲综合久久中文字幕网| 久久人人爽人人人人爽AV| 亚洲精品美女久久久久99| 7国产欧美日韩综合天堂中文久久久久| 精品久久久久久久久久中文字幕 | 久久精品国产亚洲av麻豆蜜芽| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久亚洲春色中文字幕久久久| 一本伊大人香蕉久久网手机| 97视频久久久| 国产福利电影一区二区三区久久久久成人精品综合 | 久久99久国产麻精品66| 99久久精品免费看国产一区二区三区| 精品久久久久久久国产潘金莲| 99久久夜色精品国产网站| 一本色综合网久久| 久久久久亚洲AV成人网人人网站| 99久久人妻无码精品系列| 久久无码国产专区精品| 久久久亚洲精品蜜桃臀| 秋霞久久国产精品电影院| 欧美伊人久久大香线蕉综合| 国产毛片久久久久久国产毛片| 久久久91精品国产一区二区三区| 久久人人爽人人爽人人片AV不 | 四虎国产永久免费久久| 伊人久久大香线蕉亚洲五月天| 久久夜色撩人精品国产| 久久久久亚洲?V成人无码| 国产福利电影一区二区三区久久久久成人精品综合 | 欧美精品福利视频一区二区三区久久久精品 | 五月丁香综合激情六月久久| 亚洲国产日韩综合久久精品| 久久乐国产精品亚洲综合| 久久精品国产99久久香蕉| 国产福利电影一区二区三区,免费久久久久久久精 | 国产精品久久久久久久久| 国产精品美女久久久| 精品免费tv久久久久久久| 热99re久久国超精品首页|