链表的运算(02)

木子真情

木子真情

2016-02-19 13:25

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享链表的运算(02)教程,希望对大家能有一点小小的帮助。
3.链表节点的插入
  4.链表节点的删除
  
  
  
  3.链表节点的插入
  解:
      1) 首先声明一个新节点供输入要插入节点的内容
      2) 由用户输入一个节点内容(Key),表示欲插入在哪一个节点之后
      3) 持续往下一个节点,直到节点内容Key或节点指针为NULL为止(即找不到该节点)
      4) 假如该节点不存在,则插入在节点前
          New-Next=Head
          Head=New
      5) 假如找到该节点,则
          New-Next=Pointer-Next
          Pointer-Next=New
  *程序代码如下:
  #includestdlib.h
  #includestdio.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;iMax;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] 
展开更多 50%)
分享

猜你喜欢

链表的运算(02)

编程语言 网络编程
链表的运算(02)

链表的C语言实现之单链表的查找运算

编程语言 网络编程
链表的C语言实现之单链表的查找运算

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java语言中链表和双向链表

Web开发
Java语言中链表和双向链表

链表的C语言实现之循环链表及双向链表

编程语言 网络编程
链表的C语言实现之循环链表及双向链表

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Java语言中链表和双向链表的实现

编程语言 网络编程
Java语言中链表和双向链表的实现

循环链表实验

编程语言 网络编程
循环链表实验

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

More Effective C++:不要重载的操作符

More Effective C++:不要重载的操作符

网页文字设计应该像聪明女孩穿衣服

网页文字设计应该像聪明女孩穿衣服
下拉加载更多内容 ↓