• <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 無情雨 閱讀(1461) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構

            評論

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

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

            久久精品国产久精国产| 色综合久久无码中文字幕| 999久久久国产精品| 国产精品久久久天天影视香蕉| 久久综合中文字幕| 国产成人无码精品久久久性色| 久久精品人人槡人妻人人玩AV| 中文字幕亚洲综合久久2| 久久无码AV中文出轨人妻| 久久精品国产99国产电影网| 国产精品一区二区久久精品涩爱| 精品多毛少妇人妻AV免费久久| 99麻豆久久久国产精品免费| 国产精品99久久久精品无码 | 久久久久九国产精品| 亚洲乱码中文字幕久久孕妇黑人| 88久久精品无码一区二区毛片| 亚洲午夜久久久影院伊人| 久久婷婷五月综合成人D啪| 国产精品美女久久久久网| 久久精品人人做人人爽电影| 久久精品成人影院| 久久国产乱子伦精品免费强| 亚洲第一极品精品无码久久| 午夜精品久久久久久| 91久久香蕉国产熟女线看| 久久精品亚洲一区二区三区浴池 | 精品久久久久久无码中文字幕| 久久久久亚洲AV无码网站| 久久久久亚洲国产| 久久久这里只有精品加勒比| 久久久久久久久66精品片| 亚洲国产视频久久| 久久精品国产清自在天天线| 国内高清久久久久久| 亚洲第一极品精品无码久久| 人妻精品久久久久中文字幕69| 久久人爽人人爽人人片AV| 狠色狠色狠狠色综合久久| 国产成人精品久久亚洲高清不卡 | 国内精品免费久久影院|