链表的运算(02)

2016-02-19 13:25 3 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享链表的运算(02)教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - 编程语言 】

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] 

来源:https://www.tulaoshi.com/n/20160219/1604238.html

延伸阅读
标签: autocad教程
实例说明: 1. “trim”命令用来修剪图形实体。该命令的用法很多,不仅可以修剪相交或不相交的二维对象,还可以修剪三维对象。其调用方式为: 工具栏:“ Modify (修改)” 菜单:【Modify(修改)】→【Trim(修剪)】 命令行:trim(或别名tr) 调用该命令后,系统首先显示“trim”命令的当前设置,并提示用...
为什么需要转换运算符? 大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能。 转换运算符的生命方式比较非凡,方法如下: operator 类名(); ...
12.2.1.非托管环境 如果Hibernat持久层运行在一个非托管环境中,数据库连接通常由Hibernate的连接池机制 来处理。 代码内容 session/transaction处理方式如下所示: //Non-managed environment idiom Session sess = factory.openSession(); Transaction tx = null; try { tx = sess.beginTransaction(); // do some work ... t...
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符()能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符()则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值...
标签: CorelDRAW
第二部分:着色和透明 8.现在,选择@字符并将它删除。选择轮廓对象,按下轮廓工具并保持,打开轮廓工具泊坞窗。选择第一项轮廓画笔工具。在工具对话框中,将线条宽度设为16pt,圆角,Line Caps设为第二项,其它选项保持不变,确认应用变化。(图08a,08b) 图08a 图08b 在删除符号之后,轮廓形状暴露无遗,你会发现比...

经验教程

993

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部