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

            評論

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

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

            亚洲国产精品人久久| 色妞色综合久久夜夜| 97久久天天综合色天天综合色hd | 国产视频久久| 久久综合鬼色88久久精品综合自在自线噜噜| 精品人妻伦九区久久AAA片69 | 国内精品久久国产大陆| 九九久久精品无码专区| 亚洲精品国产美女久久久| 国产精品成人无码久久久久久| 免费精品久久天干天干| 精品久久人人爽天天玩人人妻| 亚洲精品乱码久久久久久按摩| 99久久国产主播综合精品| 人妻无码αv中文字幕久久| 蜜桃麻豆www久久国产精品| 成人免费网站久久久| 国内精品伊人久久久久777| 久久久久国产亚洲AV麻豆| 精品一区二区久久久久久久网站| 精品国产日韩久久亚洲| 精品久久久久一区二区三区| 久久99中文字幕久久| 久久久婷婷五月亚洲97号色| 最新久久免费视频| 国内精品伊人久久久久影院对白| .精品久久久麻豆国产精品| 久久精品aⅴ无码中文字字幕不卡| 久久精品一区二区三区中文字幕| 久久综合欧美成人| 亚洲午夜精品久久久久久人妖| 久久久精品2019免费观看| 久久伊人五月丁香狠狠色| 久久久久久国产精品免费免费| 国产国产成人久久精品| 久久久精品午夜免费不卡| AV色综合久久天堂AV色综合在| 精品少妇人妻av无码久久| 精品国际久久久久999波多野| 亚洲va久久久噜噜噜久久男同| 99久久精品免费看国产一区二区三区 |