程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 鏈表的運算(02)

鏈表的運算(02)

編輯:C語言基礎知識
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(" ");
  }
  /*釋放鏈表*/
  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! ");    /*內存分配失敗*/
      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 ");    /*數據輸入提示*/
              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);        /*釋放鏈表*/
      }
  }
  *程序運行結果如下:
  
   [1] 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved