隨筆-144  評(píng)論-80  文章-1  trackbacks-0

          鏈表的運(yùn)算(02)

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

          3.鏈表節(jié)點(diǎn)的插入
          4.鏈表節(jié)點(diǎn)的刪除




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

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

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

          *程序運(yùn)行結(jié)果如下:

          ??
          posted on 2006-07-17 22:56 小力力力 閱讀(2380) 評(píng)論(0)  編輯  收藏 所屬分類: C/C++
          Add to Google

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          IT牛人

          都是自己淫~

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 汤阴县| 永德县| 常熟市| 垦利县| 临漳县| 轮台县| 聂拉木县| 衡东县| 稷山县| 大荔县| 桦甸市| 涟水县| 南乐县| 贺州市| 迁安市| 宁城县| 新乐市| 潜山县| 淄博市| 凌海市| 昌江| 靖西县| 明溪县| 清新县| 孟津县| 肇东市| 乌恰县| 靖西县| 克东县| 海晏县| 昌宁县| 浙江省| 南和县| 阆中市| 霞浦县| 荆门市| 辛集市| 安阳市| 泾源县| 江阴市| 肥城市|