• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            鏈表的操作實(shí)例

            Posted on 2012-03-01 11:49 hoshelly 閱讀(430) 評論(0)  編輯 收藏 引用 所屬分類: DS && Algorithm
            要求:從終端輸入一組整數(shù)(大于10),以0作為結(jié)束標(biāo)志,將這一組整數(shù)存放在一個(gè)鏈表中(結(jié)束標(biāo)志0不包括在內(nèi)),打印出該鏈表中的值。然后刪除該鏈表的第5個(gè)元素,打印出刪除后的結(jié)果。最后在內(nèi)存中釋放掉該鏈表。
            源程序如下:

            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <conio.h>
            typedef 
            int ElemType;
            typedef 
            struct node{
                ElemType data;
                
            struct node *next;
            }LNode,
            *LinkList;

            LinkList GreatLinkList(
            int n){
                LinkList p,r,list
            =NULL;
                ElemType e;
                
            int i;
                
            for(i=1;i<=n;i++)
                {
                    scanf(
            "%d",&e);
                    p
            =(LinkList)malloc(sizeof(LNode));
                    p
            ->data=e;
                    p
            ->next=NULL;
                    
            if(!list)
                        list
            =p; //如果list為空,則說明本次生成的結(jié)點(diǎn)為第一個(gè)結(jié)點(diǎn),將p賦給list
                    else
                        r
            ->next=p;//否則將p賦給r->next,這里r永遠(yuǎn)指向原先鏈表的最后一個(gè)結(jié)點(diǎn),也就是要插入結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)
                    r=p;
                }
                
            return list;//返回鏈表頭指針
            }

            void insertList(LinkList *list,LinkList q,ElemType e)
            {
                LinkList p;
                p
            =(LinkList)malloc(sizeof(LNode));
                p
            ->data=e;
                
            if(!*list){ //當(dāng)鏈表為空時(shí),將p賦給list,p的next域的值置為空
                    *list=p;
                    p
            ->next=NULL;
                }
                
            else
                {
                    p
            ->next=q->next;//q為插入指針指向的結(jié)點(diǎn)
                    q->next=p;
                }
            }

            void delLink(LinkList *list,LinkList q){
                LinkList r;
                
            if(q==*list)//如果刪除第一個(gè)結(jié)點(diǎn)
                {
                    
            *list=q->next;
                    free(q);
                }
                
            else //刪除其他結(jié)點(diǎn)
                {
                    
            for(r=*list;r->next!=q;r=r->next);//當(dāng)q所指向的結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)的指針未知時(shí),需要先通過鏈表頭指針list遍歷鏈表,
                                                       
            //找到q的前驅(qū)結(jié)點(diǎn)的指針,并把該指針賦值給指針變量r
                    if(r->next!=NULL){
                        r
            ->next=q->next;
                        free(q);
                    }
                }
            }

            void destroyLinkList(LinkList *list){
                LinkList p,q;
                p
            =*list;
                
            while(p)//循環(huán)釋放掉每個(gè)鏈表結(jié)點(diǎn)
                {
                    q
            =p->next;
                    free(p);
                    p
            =q;
                }
                
            *list=NULL;//將該鏈表完全置空,防止list變成野指針
            }

            void main()
            {
                
            int e,i;
                LinkList l,q;
                q
            =l=GreatLinkList(1);//創(chuàng)建鏈表一個(gè)結(jié)點(diǎn),q和l指向該結(jié)點(diǎn)
                scanf("%d",&e);
                
            while(e) //循環(huán)輸入數(shù)據(jù),同時(shí)插入新生成的結(jié)點(diǎn)
                {
                    insertList(
            &l,q,e);
                    q
            =q->next;
                    scanf(
            "%d",&e);
                }
                q
            =l;
                printf(
            "The content of the linklist\n");
                
            while(q) //輸出鏈表中的內(nèi)容
                {
                    printf(
            "%d ",q->data);
                    q
            =q->next;
                }
                q
            =l;
                printf(
            "\nDelete teh fifthe element\n");
                
            for(i=0;i<4;i++)
                {
                    q
            =q->next;
                }
            //將指針q指向鏈表的第5個(gè)元素

                delLink(
            &l,q);
                q
            =l;
                
            while(q)
                {
                    printf(
            "%d ",q->data);
                    q
            =q->next;
                }
                destroyLinkList(
            &l);
                getche();
            //輸入后立即從控制臺取字符,不以回車為結(jié)束(帶回顯)
            }
            亚洲精品99久久久久中文字幕| 91性高湖久久久久| 亚洲精品无码成人片久久| 久久综合香蕉国产蜜臀AV| 久久这里只精品国产99热| 亚洲精品高清一二区久久| …久久精品99久久香蕉国产| 国内精品久久久久久不卡影院| 四虎国产精品成人免费久久| 无码人妻久久一区二区三区免费| 国产日产久久高清欧美一区| 久久精品极品盛宴观看| 中文字幕成人精品久久不卡| 亚洲国产精品无码久久一线| 久久av免费天堂小草播放| 久久水蜜桃亚洲av无码精品麻豆| 无码8090精品久久一区 | 久久噜噜电影你懂的| 久久精品一区二区三区中文字幕| 久久人人妻人人爽人人爽| 久久国产精品波多野结衣AV | 国产精品久久婷婷六月丁香| 久久久久久亚洲精品成人| 久久精品综合网| 久久se这里只有精品| 久久精品中文无码资源站| 理论片午午伦夜理片久久| 狠狠色丁香婷综合久久| 99久久香蕉国产线看观香| 久久青青草原精品国产软件| 国产午夜精品久久久久九九电影| 国产精品免费福利久久| 影音先锋女人AV鲁色资源网久久 | 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 色成年激情久久综合| 国产成人久久精品激情| 无码人妻少妇久久中文字幕蜜桃| 97香蕉久久夜色精品国产 | 久久不射电影网| 久久久久久国产精品免费无码| 亚洲精品午夜国产VA久久成人|