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

            我心飛翔

            有事不慌,無事不荒,有容乃大,無欲則剛,以德立綱,外圓內方。

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              1 隨筆 :: 9 文章 :: 13 評論 :: 0 Trackbacks

            struct Lnode  // 定義鏈表類型
            {
              ElemType data;
              struct Lnode *next;
             };
              typedef struct Lnode *LinkList;

              int InitList(LinkList &L)  //初始化一個鏈表
              {
                L=(LinkList)malloc(sizeof(Lnode));
                if(!L)
                 exit(OVERFLOW);
                 L->next=NULL;
                 return OK;
              }

              int DestroyList(LinkList &L)  //銷毀鏈表
              {
                LinkList q;
                while(L)
                {
                  q=L->next;
                  free(L);
                  L=q;
                }
                return OK;
              }

              int ClearList(LinkList L)  //清零操作
              {
                LinkList p,q;
                q=L->next;
                while(q)
                {
                  p=q->next;
                  free(q);
                  q=p;
                }
                L->next=NULL;
                return OK;
              }

              int ListEmpty(LinkList L)  //判空操作
              {
                if(L->next==NULL)
                return TRUE;
                else
                return FALSE;
              }

              int ListLength(LinkList L)  //計算鏈表的長度
              {
                LinkList p;
                int i=0;
                p=L->next;
                while(p)
                {
                  ++i;
                  p=p->next;
                }
                return i;
              }

              int GetElem(LinkList L,int i,ElemType e)  //得到第i個元素的數據域
              {
                LinkList p;
                int j=0;
                p=L->next;
                while(p && j<i-1)
                {
                  p=p->next;
                  ++j;
                }
                if(j>i || !p)
                return ERROR;
                else
                e=p->data;
                return OK;
              }

              int LocateElem(LinkList L,ElemType e,int (*compare)(ElemType,ElemType))
              {                       //找到第一個對于E滿足函數的數據元素的位置
                LinkList p;
                int i=0;
                p=L->next;
                while(p)
                {
                  ++i;
                  if(compare(p->data,e))
                  return i;
                  p=p->next;
                }
                return 0;
              }

              int InsertList(LinkList L,int i,ElemType e)  //在第i個數據元素上插入一個元素
              {
                LinkList p,s;
                int j=0;
                p=L;
                while(p && j<i-1)
                {
                  p=p->next;
                  ++j;
                }
                if(!p || j>i)
                return ERROR;
                s=(LinkList)malloc(sizeof(Lnode));
                s->data=e;
                s->next=p->next;
                p->next=s;
                return OK;
              }

              int DeleteList(LinkList &L,int i,ElemType e) //刪除第i個元素
              {
                LinkList p,q;
                int j;
                j=0;
                p=L;
                while(p->next && j<i-1)
                {
                 p=p->next;
                 ++j;
                }
                if(!p->next || j>i)
                return ERROR;
                q=p->next;
                p->next=q->next;
                e=q->data;
                free(q);
                return OK;
              }

              int ListTraverse(LinkList L,int (*vi)(ElemType))
              //對所有鏈表中的元素進行函數vi操作
              {
                LinkList p;
                p=L->next;
                while(p)
                {
                  vi(p->data);
                  p=p->next;
                }
                return OK;
              }

              void MergeList(LinkList La,LinkList Lb,LinkList &Lc)
              {                              //合并二個非遞減的La和Lb得到一個非遞減的Lc
                LinkList pa,pb,pc;
                pa=La->next;
                pb=Lb->next;
                Lc=pc=La;
                while(pa && pb)
                {
                  if(pa->data <= pb->data)
                  {
                    pc->next=pa;
             pc=pa;
             pa=pa->next;
                  }
                  else{
                    pc->next=pb;
             pc=pb;
             pb=pb->next;
                  }
                }
                pc->next=pa?pa:pb;
                free(Lb);
             Lb=NULL;
              }

            posted on 2005-10-11 22:48 無情雨 閱讀(1451) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構

            評論

            # re: 線性鏈表的操作(C語言) 2007-04-20 13:54 123456
            請問一下,這個 int ListTraverse(LinkList L,int (*vi)(ElemType))
            在主函數如何應用,就是具體應該怎樣實現??
            謝謝
              回復  更多評論
              

            # re: 線性鏈表的操作(C語言) 2007-04-20 16:12 wzqxp2002
            最好進一步用模版實現  回復  更多評論
              

            伊人久久精品影院| 精品久久久久久无码国产| 四虎影视久久久免费| 青青草原综合久久大伊人| 无码人妻精品一区二区三区久久久| 国内精品久久人妻互换| 偷偷做久久久久网站| 午夜精品久久久久久中宇| 国产精品无码久久综合 | 国内精品久久久久久不卡影院| 亚洲国产天堂久久综合网站| 久久精品国产网红主播| 国产成人久久精品一区二区三区| 久久精品一区二区三区中文字幕| 久久国产精品99久久久久久老狼| 漂亮人妻被黑人久久精品| 精品熟女少妇AV免费久久| 亚洲国产成人乱码精品女人久久久不卡 | 精品久久人人做人人爽综合| 中文字幕久久久久人妻| 久久亚洲AV无码西西人体| 成人精品一区二区久久| 色成年激情久久综合| 久久99国产精品99久久| 久久久久青草线蕉综合超碰 | 久久无码人妻一区二区三区| 久久综合成人网| 婷婷久久综合九色综合98| 人妻精品久久无码专区精东影业| 久久精品亚洲乱码伦伦中文 | 久久久久久国产a免费观看黄色大片| 久久国产精品免费一区二区三区 | 一日本道伊人久久综合影| 精品久久国产一区二区三区香蕉 | 91亚洲国产成人久久精品| av无码久久久久不卡免费网站| 老男人久久青草av高清| 婷婷国产天堂久久综合五月| 亚洲精品国产第一综合99久久| 久久精品成人| 麻豆av久久av盛宴av|