链表的运算(02)

2016-02-19 13:25 8 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] 

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

延伸阅读
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...
标签: autocad教程
2. 在该对话框中,用户通过设置“Named layer filters(命名图层过滤器)”栏来控制图层列表中所显示的图层项目。 类似于“Linetype Manager(线型管理器)”对话框,用户可使用“Show all layers(显示全部图层)”、“Show all used layers(显示全部已使用图层)”和“Show all Xref dependent layers(显示全部依赖外部参照图层)...
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符()能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符()则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值...
偶写了一个程序,它的功能是将链表、堆栈、和队列进行集合操作,可以处理一般的插入N个元素,删除N个元素,以及入栈出栈的问题。 --------本程序的最大的特点是能够准确的显示当前的集合操作的各个元素的状态,并且能够将队列的数据以堆栈的格式输出,同样也支持将堆栈的数据以队列的格式显示出来,报错功能也不错,程序的最后将我们开辟的...
一个简单的链表模版类的实现 作者:Smoke 源代码下载     这是翻阅 《数据结构、算法与应用—— C++语言描述》 以及在网上得到的一些资料后写出来的。起因是在项目中要用到一个链表,但我做一个简单的链表在C++中用的时候跟C差别很多,比如赋值运算(编...

经验教程

419

收藏

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