龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

链表的运算(02)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
3.链表节点的插入 4.链表节点的删除 3.链表节点的插入 解: 1) 首先声明一个新节点供输入要插入节点的内容 2) 由用户输入一个节点内容(Key),表示欲插入在哪一个节点之后 3) 持续往下

3.链表节点的插入

  4.链表节点的删除

  

  

  

  3.链表节点的插入

  解:

   1) 首先声明一个新节点供输入要插入节点的内容

   2) 由用户输入一个节点内容(Key),表示欲插入在哪一个节点之后

   3) 持续往下一个节点,直到节点内容Key或节点指针为NULL为止(即找不到该节点)

   4) 假如该节点不存在,则插入在节点前

   New->Next=Head

   Head=New

   5) 假如找到该节点,则

   New->Next=Pointer->Next

   Pointer->Next=New

  *程序代码如下:

  #include

  #include

  #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

   {

   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]

精彩图集

赞助商链接