• <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>

            我心飛翔

            有事不慌,無(wú)事不荒,有容乃大,無(wú)欲則剛,以德立綱,外圓內(nèi)方。

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              1 隨筆 :: 9 文章 :: 13 評(píng)論 :: 0 Trackbacks

            線性表的順序表示:

             

            #define LIST_INIT_SIZE 100    定義一個(gè)線性表類型

            #define LISTINCREMENT 10

            typedef struct

            {

              ElemType *elem; 基址

              int length; 元素的長(zhǎng)度

              int listsize;當(dāng)前的存儲(chǔ)容量

             }Sqlist;

             

             void InitList_Sq(Sqlist &L)  初始化操作

             {

               L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

               if(!L.elem)

               return overflow;

               L.length=0;

               L.listsize=LIST_INIT_SIZE;

               return ok;

             }

             

             void DestroyList_Sq(Sqlist &L)  銷毀線性表

             {

               free(L.elem);

               L.elem=NULL;

               L.length=0;

               L.listsize=0;

               return ok;

             }

             

            void ClearList(Sqlist L)  清零操作

            {

              L.length=0;

              return ok;

            }

             

            void ListEmpty(Sqlist L)  判空操作

            {

              if(L.length=0)

               return True;

               else

               return False;

            }

             

            int ListLength(Sqlist L)  輸出表的長(zhǎng)度,數(shù)據(jù)元素個(gè)數(shù)

            {

              return L.length;

            }

             

            void GetElem(Sqlist &L,int i,ElemType &e) 得到第I 個(gè)元素的數(shù)據(jù)元素的值

            {

               if(i<1 || i>L.length)

               return error;

               e=*(L.elem+i-1);

               return ok;

            }

             

            int LocateElem(Sqlist &L,ElemType e,void (*compare)(ElemType,ElemType)) 查找與E相等的元素的位置

            {

              ElemType *p;

              i=1;

              while(i<=L.length && !compare(*p++,e))

              ++i;

              if(i<=L.length)

              return i;

              else

              return 0;

            }

             

            void PriorElem(Sqlist L,ElemType cur_e,ElemType pre_e)  得到給出的數(shù)的前一個(gè)元素值

            {

              int i=2;

              ElemType *p;

              p=L.elem+1;

              while(i<=L.length && !(*p++==cur_e))

              ++i;

              if(i>L.length)

              return INFEASIBLE;

              else

              {

                pre_e=*--p;

                return OK;

              }

            }

             

            void NextElem(Sqlist L,ElemType pre_e,ElemType cur_e)  得到后一個(gè)元素的值

            {

              int i=1;

              ElemType *p

              p=L.elem;

              while(i<L.length && !(*p++==pre_e))

              ++i;

              if(i>=L.length)

              return INFEASIBLE;

              else

              {

                cur_e=*++p;

                return OK;

              }

            }

             

            void InsertElem(Sqlist &L,int i,ElemType e)  在第I個(gè)元素中插入一個(gè)值為E的元素

            {

              if(i<1 || i>=length+1)

              return ERROR;

              if(L.length>=L.listsize)

              {

             if(!newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)

                *sizeof(ElemType))))

                return OVERFLOW;

                L.elem=newbase;

                L.listsize+=LISTINCREMENT;

              }

              p=L.elem+L.length-1;

              q=L.elem+i-1;

              for(p;p>=q;--p)

              *(p+1)=*p;

              *q=e;

              ++L.length;

              return ok;

            }

             

            void DeleteElem(Sqlist &L,int i,ElemType e)  刪除第I個(gè)元素

            {

              if(i<1 || i>=L.length)

              return FALSE;

              p=L.elem+i-1;

              q=L.elem+L.length-1;

              e=*p;

              for(p;p<=q;++p)

              *p=*(p+1);

              --L.length;

              return OK;

            }

             

            void ListTraverse(Sqlist &L,void (*vi)(ElemType))  對(duì)線性表進(jìn)行VI的操作

            {

              int i;

              ElemType *p;

              p=L.elem;

              for(i=1;i<=L.length;++i)

              vi(*p++);

              return OK;

            }


            以上是線性表的一些常用的原操作. 

             

            例:

            1.求一個(gè)新的集合A=A U B

            void union(Sqlist &LA,Sqlist LB)

            {

              la_len=LA.length;

              lb_len=LB.length;

              for(i=1;i<=lb_len;++i)

              {

               GetElem(LB,i,e);

               if(!Locate(LA,e,compare()))

               InsertList(LA,++la_len,e);

              }

              return OK;

            }

             

            2.將二個(gè)非遞減的LA表和LB表歸并為一個(gè)新的非遞減的LC

            void MergeList(Sqlist LA,Sqlist LB,Sqlist &LC)

            {

              i=j=1;k=0;

              InitList(LC);

              while(i<=LA.length && j<=LB.length)

              {

               GetElem(LA,i,ai);

               GetElem(LB,j,bj);

               if(ai<=bj)

               {

                 InsertList(LC,++k,ai);

                 ++i;

               }

               else

               {

                 InsertList(LC,++k,bj);

                 ++j;

               }

              }

              while(i<=LA.length)

              {

                GetElem(LA,i,ai);

                InsertList(LC,++k,ai);

                ++i;

              }

              while(j<=LB.length)

              {

                GetElem(LB,i,bj);

                InsertList(LC,++k,bj);

                ++j;

              }

              return OK;

            }

            posted on 2005-10-11 00:59 無(wú)情雨 閱讀(1530) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

            評(píng)論

            # re: 線性表的順序表示(C語(yǔ)言) 2006-07-29 23:48 嘉湖孺子
            請(qǐng)問(wèn), (*vi)(ElemType)和(*compare)(ElemType,ElemType))是怎么實(shí)現(xiàn)的,我在編這個(gè)程序的時(shí)候,似乎沒(méi)有實(shí)現(xiàn)它們,也能運(yùn)行啊!!
            迷惑中,如蒙回答,不勝感激。
            jiahuruzi@126.com
            再次感激  回復(fù)  更多評(píng)論
              

            # re: 線性表的順序表示(C語(yǔ)言) 2007-11-16 09:03 糊涂
            這是數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版嗎?
            可以在TC中運(yùn)行嗎?
            如果沒(méi)有 可以在寫(xiě)個(gè)嗎
            ?
              回復(fù)  更多評(píng)論
              

            久久人人爽爽爽人久久久| 久久久久一本毛久久久| 99久久精品免费看国产一区二区三区| 久久久中文字幕日本| 精品久久亚洲中文无码| 久久精品国产亚洲AV高清热| 久久精品这里热有精品| 色99久久久久高潮综合影院| 久久国产精品成人影院| 久久99精品九九九久久婷婷| 精品一二三区久久aaa片| 99久久国产主播综合精品| 无码任你躁久久久久久老妇App| 99久久免费国产特黄| 婷婷久久五月天| 久久久久无码专区亚洲av| 国产精品18久久久久久vr | 无码AV中文字幕久久专区| 青草影院天堂男人久久| 无码精品久久久久久人妻中字| 久久无码一区二区三区少妇 | 亚洲AV日韩AV永久无码久久| 久久久久人妻精品一区三寸蜜桃| 久久精品午夜一区二区福利| 久久久久久国产精品美女| 欧美激情精品久久久久久久九九九| 97久久精品无码一区二区天美| 77777亚洲午夜久久多人| 人人妻久久人人澡人人爽人人精品| 国产午夜精品久久久久九九电影| 久久青青草原精品国产| 欧美丰满熟妇BBB久久久| 亚洲精品乱码久久久久久中文字幕| 亚洲日本久久久午夜精品| 欧美性大战久久久久久| 一97日本道伊人久久综合影院| 性做久久久久久久久| 久久受www免费人成_看片中文| 九九精品久久久久久噜噜| 亚洲午夜久久久久久久久久| 亚洲国产美女精品久久久久∴|