<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-144  評論-80  文章-1  trackbacks-0

    鏈表的運算(02)

    發表日期:2003年4月8日????作者:C語言之家搜集整理??已經有2462位讀者讀過此文

    3.鏈表節點的插入
    4.鏈表節點的刪除




    3.鏈表節點的插入
    解:
    ??? 1) 首先聲明一個新節點供輸入要插入節點的內容
    ??? 2) 由用戶輸入一個節點內容(Key),表示欲插入在哪一個節點之后
    ??? 3) 持續往下一個節點,直到節點內容Key或節點指針為NULL為止(即找不到該節點)
    ??? 4) 如果該節點不存在,則插入在節點前
    ????????New->Next=Head
    ????????Head=New
    ??? 5) 如果找到該節點,則
    ??????? New->Next=Pointer->Next
    ??????? Pointer->Next=New
    *程序代碼如下:
    #include<stdlib.h>
    #include<stdio.h>
    #define Max 10
    struct List??????????? /*節點結構聲明*/
    {
    ??? int Number;
    ??? int Total;
    ??? struct List *Next;
    };
    typedef struct List Node;
    typedef Node *Link;
    int Data[2][Max]={1,3,5,7,2,4,6,8,9,0,15,35,10,67,25,65,38,70,30,20};
    /*插入節點至鏈表內*/
    Link Insert_List(Link Head,Link New,int Key)
    {
    ??? Link Pointer;??????? /*聲明節點*/
    ??? Pointer=Head;??????? /*Pointer指針設為首節點*/
    ??? while(1)
    ??? {
    ??????? if(Pointer==NULL)??? /*插入在首節點前*/
    ??????? {
    ??????????? New->Next=Head;
    ??????????? Head=New;
    ??????????? break;
    ??????? }
    ??????? if(Pointer->Number==Key)??? /*插入在鏈表中間或尾端*/
    ??????? {
    ??????????? New->Next=Pointer->Next;
    ??????????? Pointer->Next=New;
    ??????????? break;
    ??????? }
    ??????? Pointer=Pointer->Next;??? /*指向下一個節點*/
    ??? }
    ??? return Head;
    }
    /*輸出鏈表數據*/
    void Print_List(Link Head)
    {
    ??? Link Pointer;??????? /*節點聲明*/
    ??? Pointer=Head;??????? /*Pointer指針設為首節點*/
    ??? while(Pointer!=NULL)????/*當節點為NULL結束循環*/
    ??? {
    ????????printf("[%d,%d]",Pointer->Number,Pointer->Total);
    ????????Pointer=Pointer->Next;????/*指向下一個節點*/
    ??? }
    ??? printf("\n");
    }
    /*釋放鏈表*/
    void Free_List(Link Head)
    {
    ??? Link Pointer;??????? /*節點聲明*/
    ??? while(Head!=NULL)??? /*當節點為NULL結束循環*/
    ??? {
    ??????? Pointer=Head;
    ??????? Head=Head->Next;
    ??????? free(Pointer);
    ??? }
    }
    /*建立鏈表*/
    Link Create_List(Link Head)
    {
    ??? Link New;??????? /*節點聲明*/
    ??? Link Pointer;??? /*節點聲明*/
    ??? int i;
    ??? Head=(Link)malloc(sizeof(Node));??? /*分配內存*/
    ??? if(Head==NULL)
    ??????? printf("Memory allocate Failure!\n");??? /*內存分配失敗*/
    ??? else
    ??? {
    ??????? Head->Number=Data[0][0];??????? /*定義首節點數據編號*/
    ??????? Head->Total=Data[1][0];
    ??????? Head->Next=NULL;
    ??????? Pointer=Head;??????? /*Pointer指針設為首節點*/
    ??????? for(i=1;i<Max;i++)
    ??????? {
    ??????????? New=(Link)malloc(sizeof(Node));??? /*分配內存*/
    ??????????? New->Number=Data[0][i];
    ??????????? New->Total=Data[1][i];
    ??????????? New->Next=NULL;
    ??????????? Pointer->Next=New;??????? /*將新節點串連在原列表尾端*/
    ??????????? Pointer=New;??????????? /*列表尾端節點為新節點*/
    ??????? }
    ??? }
    ??? return Head;
    }
    /*主程序*/
    void main()
    {
    ??? Link Head;??????? /*節點聲明*/
    ??? Link New;
    ??? int Key;
    ??? Head=Create_List(Head);??? /*建立鏈表*/
    ??? if(Head!=NULL)
    ??? {
    ??????? Print_List(Head);????
    ??????? while(1)
    ??????? {
    ??????????? printf("Input 0 to Exit\n");??? /*數據輸入提示*/
    ??????????? New=(Link)malloc(sizeof(Node));??? /*分配內存*/
    ??????????? printf("Please input Data number:");
    ??????????? scanf("%d",&New->Number);
    ??????????? if(New->Number==0)??????? /*輸入0時結束循環*/
    ??????????????? break;
    ??????????? printf("Please input the data total:");
    ??????????? scanf("%d",&New->Total);
    ??????????? printf("Please input the data number for Insert:");
    ??????????? scanf("%d",&Key);
    ??????????? Head=Insert_List(Head,New,Key);??? /*插入節點*/
    ??????????? Print_List(Head);??????????????? /*輸出鏈表數據*/
    ??????? }
    ??????? Free_List(Head);??????? /*釋放鏈表*/
    ??? }
    }
    *程序運行結果如下:

    ------------------------------------------------------------------

    4.鏈表節點的刪除
    解:
    ??? 持續往下一個節點查找要刪除的節點,直到節點內容找到或節點指針為NULL(即找不到該節點)。
    ??? 在刪除時,必須記錄前一個節點的位置(Back)
    ??? 如果該節點不存在,輸出一個節點不存在的提示
    ??? 如果該節點存在,且是首節點:
    ??????? Head=Pointer->Next
    ??????? free(Pointer)
    ??? 如果該節點存在,但不是首節點(即鏈表內節點或尾端節點),則:
    ??????? Back->Next=Pointer->Next
    ??????? free(Pointer)
    *程序代碼如下:
    #include<stdio.h>
    #include<stdlib.h>
    #define Max 10
    struct List????????????/*節點結構聲明 */
    {
    ????int Number;
    ????int Total;
    ????struct List *Next;
    };
    typedef struct List Node;
    typedef Node *Link;
    int Data[2][Max]={1,3,5,7,2,4,6,8,9,10,15,35,10,67,25,65,38,70,30,20};
    /*刪除鏈表內節點*/
    Link Delete_List(Link Head,int Key)
    {
    ????Link Pointer;????????/*節點聲明*/
    ????Link Back;
    ????Pointer=Head;????????/*Pointer 指針設為首節點*/
    ????while(1)
    ????{
    ????????if(Pointer->Next==NULL)
    ????????{
    ????????????printf("Not Found!\n");
    ????????????break;
    ????????}
    ????????if(Head->Number==Key)????????/*刪除首節點*/
    ????????{
    ????????????Head=Pointer->Next;
    ????????????free(Pointer);
    ????????????break;
    ????????}
    ????????Back=Pointer;
    ????????Pointer=Pointer->Next;????/*指向下一個節點*/
    ????????if(Pointer->Number==Key)????/*插入在鏈表中間或尾端*/
    ????????{
    ????????????Back->Next=Pointer->Next;
    ????????????free(Pointer);
    ????????????break;
    ????????}
    ????}
    ????return Head;
    }
    /*輸出鏈表數據*/
    void Print_List(Link Head)
    {
    ????Link Pointer;????????/*節點聲明*/
    ????Pointer=Head;????????/*Pointer指針設為首節點*/
    ????while(Pointer!=NULL)????/*當節點為NULL結束循環*/
    ????{
    ????????printf("[%d,%d]",Pointer->Number,Pointer->Total);
    ????????Pointer=Pointer->Next;????/*指向下一個節點*/
    ????}
    ????printf("\n");
    }
    /*釋放鏈表*/
    void Free_List(Link Head)
    {
    ????Link Pointer;????????/*節點聲明*/
    ????while(Head!=NULL)????/*當節點為NULL結束循環*/
    ????{
    ????????Pointer=Head;
    ????????Head=Head->Next;????????/*指向下一個節點*/
    ????????free(Pointer);
    ????}
    }
    /*建立鏈表*/
    Link Create_List(Link Head)
    {
    ????Link New;????????/*節點聲明*/
    ????Link Pointer;
    ????int i;
    ????Head=(Link)malloc(sizeof(Node));????????/*分本內存*/
    ????if(Head==NULL)
    ????????printf("Memory allocate Failure!\n");????/*內存分配失敗*/
    ????else
    ????{
    ????????Head->Number=Data[0][0];????????/*定義首節點數據編號*/
    ????????Head->Total=Data[1][0];
    ????????Head->Next=NULL;
    ????????Pointer=Head;????????/*Pointer指針設為首節點*/
    ????????for(i=1;i<Max;i++)
    ????????{
    ????????????New=(Link)malloc(sizeof(Node));????????/*分配內存*/
    ????????????New->Number=Data[0][i];
    ????????????New->Total=Data[1][i];
    ????????????New->Next=NULL;
    ????????????Pointer->Next=New;????????/*將新節點串連在原列表尾端*/
    ????????????Pointer=New;????????????/*列表尾端節點為新節點*/
    ????????}
    ????}
    ????return Head;
    }
    /*主程序*/
    void main()
    {
    ????Link Head=NULL;????????/*節點聲明*/
    ????int Key;
    ????Head=Create_List(Head);????????/*建立鏈表*/
    ????if(Head!=NULL)
    ????{
    ????????Print_List(Head);
    ????????while(1)
    ????????{
    ????????????printf("Input 0 to exit\n");????/*數據輸入提示*/
    ????????????printf("Please input the data number for Delete:");
    ????????????scanf("%d",&Key);
    ????????????if(Key==0)????????/*時結束循環*/
    ????????????????break;
    ????????????Head=Delete_List(Head,Key);????/*刪除節點*/
    ????????????Print_List(Head);????????????? /*輸出鏈表*/
    ????????}
    ??????? Free_List(Head);????????/*釋放鏈表*/
    ????}
    }

    *程序運行結果如下:

    ??
    posted on 2006-07-17 22:56 小力力力 閱讀(2376) 評論(0)  編輯  收藏 所屬分類: C/C++
    主站蜘蛛池模板: 亚洲午夜成人精品无码色欲| 亚洲理论电影在线观看| 亚洲免费视频观看| 免费成人福利视频| 亚洲人成电影在线天堂| 久久久久久久久久免免费精品| 四虎永久免费网站免费观看| 亚洲日韩国产欧美一区二区三区| 毛片a级毛片免费观看品善网| 亚洲免费中文字幕| 国产成人A在线观看视频免费| 精品久久久久久亚洲精品| 嘿嘿嘿视频免费网站在线观看| 亚洲乱码日产精品BD在线观看| 中国在线观看免费国语版| 亚洲码欧美码一区二区三区| 国产大片91精品免费观看男同| 天天综合亚洲色在线精品| 亚洲精品视频免费| 一个人免费视频在线观看www | 十八禁的黄污污免费网站| 全亚洲最新黄色特级网站| 亚洲日本VA中文字幕久久道具| 国产猛烈高潮尖叫视频免费| 亚洲av无码一区二区三区天堂 | 精品无码专区亚洲| 亚洲视频在线精品| 久久精品成人免费观看97| 久久久亚洲精品无码| 男人j进入女人j内部免费网站 | 四虎成人精品一区二区免费网站| 亚洲日本乱码卡2卡3卡新区| 最近中文字幕mv免费高清电影 | 亚洲Av无码乱码在线播放| 三年在线观看免费观看完整版中文 | 亚洲视频小说图片| 免费AA片少妇人AA片直播 | 亚洲av永久无码精品古装片| 久久久久成人精品免费播放动漫| 亚洲色成人网一二三区| 日本免费在线中文字幕|