`
pcajax
  • 浏览: 2163033 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

单链表的创建、插入、删除、倒置操作

阅读更多

/*---------------------------------------------------*/
    /*--------------单链表的创建、插入、删除、倒置操作-----------*/
    /*--------------Written by redfire250-----2005.5.10----*/
    /*-----------------------------------------------------*/

    #include<malloc.h>
    #include<stdio.h>
    #define null 0
    struct student
    {
     long Number;
     char Name[20];
     long Score;
     struct student *Next;
    };

    int n=0;/*n为全局变量,用来计算链表的结点个数*/

    /*-----------------------------------------*/
    /*--------------创建结点函数Creat()--------*/
    /*-----------------------------------------*/
    struct student *Creat()
    {

      struct student *p1;
      struct student *p2;
      struct student *head=null;
      p1=p2=(struct student *)malloc(sizeof(struct student));/*开辟一段可用内存单元*/
      printf("please input the student's Number Name and the Score:\n");
      scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);

      while(p2->Number!=0)
      {
          n++;

          if(n==1)            /*是否开辟的是第一个结点*/
          head=p2;
          else
          p1->Next=p2;

          p1=p2;
          p2=(struct student *)malloc(sizeof(struct student));
          printf("Input the  Number the Name and the Score:\n");
          scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
      }
      p1->Next=null;
      return(head);
    }

    /*------------------------------------------*/
    /*--------------查看链表内容函数View()------*/
    /*------------------------------------------*/
     View(struct student *head)
     {
      struct student *p;
      p=head;
      while(p->Next!=null)
      {
           printf("%ld  %s  %ld\n",p->Number,p->Name,p->Score);
           p=p->Next;
      }
      printf("%ld  %s  %ld\n",p->Number,p->Name,p->Score);
     }

    /*-------------------------------------------------*/
    /*--------------插入结点函数(前插)Insert()-------*/
    /*-------------------------------------------------*/
     Insert(struct student *head,int Num)       /*head为链表头指针,Num插入链表位置*/
    {
     int t=1;
     struct student *p1,*p2;
     p1=head;
     if (Num>n||Num<0)
     {
         printf("input error!!!\n");
         return 0;
     }

     while(t<Num-1)                  /*找到要插入结点的前一个结点*/
     {
         p1=p1->Next;
         t++;
     }
     p2=(struct student *)malloc(sizeof(struct student));
     printf("Input the  Number the Name and the Score:\n");
     scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
     p2->Next=p1->Next;
     p1->Next=p2;
     n++;

    }

    /*------------------------------------------*/
    /*------------ 删除结点函数Delnode()--------*/
    /*-----------------------------------------*/
     Delnode(struct student *head,int node)
    {
     int t=1;
     struct student *p1,*p2;
     p2=head;
     if (node>n||node<1)
     {
         printf("error!!! The node is not exist!");
         return 0;
     }
     while(t<node-1)       /*找到要删除结点的前一个结点*/
     {
         p2=p2->Next;
         t++;
     }
     p1=p2->Next->Next;     /*找到要删除结点的后一个结点*/
     free(p2->Next);        /*释放要删除的结点空间(删除)*/
     p2->Next=p1;           /*前一结点指向后一结点*/
     n--;
    }

    /*-------------------------------------------------*/
    /*--------------逆序重组链表Invert()-------*/
    /*-------------------------------------------------*/
     struct student *Invert(struct student *head)
    {
      struct student *p1,*p2;
      p1=head;
      p2=p1->Next;
      head=p2->Next;
      p1->Next=null;
      while(head->Next!=null)
      {
       p2->Next=p1;
       p1=p2;
       p2=head;
       head=head->Next;
      }
      head->Next=p2;
      p2->Next=p1;
      return head;
    }

    main()
    {
     int number1,number2;
     struct student *head;
     head=Creat();
     View(head);

     printf("the n that you want to insert:\n");
     scanf("%d",&number1);
     Insert(head,number1);
     View(head);

     printf("the node that you want to DELETE:\n");
     scanf("%d",&number2);
     Delnode(head,number2);
     View(head);

     printf("Inverte the list:\n");
     View(Invert(head));

     getch();
    }

<script type="text/javascript"><!-- google_ad_client = "pub-6770445892601887"; /* 468x60, 创建于 09-11-19 */ google_ad_slot = "4437639877"; google_ad_width = 468; google_ad_height = 60; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
分享到:
评论

相关推荐

    单链表的操作 创建 删除 排序 求长度 倒置

    单链表的操作 包括创建 删除 排序 求长度 倒置

    C/C++单链表的一些操作

    在计算机科学中,数据...总结来说,C/C++中的单链表是通过节点间的指针连接形成的数据结构,提供了多种操作,如插入、删除、查找、遍历、反转和排序。理解和熟练掌握这些操作对于提升编程技能和解决实际问题至关重要。

    单链表代码.rar

    06数据结构-单链表的存储结构,07数据结构-单链表的创建与遍历,08数据结构-单链表的查找和插入,09数据结构-单链表的删除和倒置,10数据结构-单链表的有序插入和排序,用C语言在Linux下写的,可以快速移植到各平台

    单链表基本操作【超全】

    在这个主题中,我们将深入探讨单链表的基本操作,包括创建、插入、删除、遍历以及一些高级操作。 1. **创建单链表** 创建单链表通常从一个空的头节点开始。这个头节点不存储任何数据,仅作为链表的起始点。通过向...

    单链表的各种操作,包括使用二级指针创建单链表

    使用二级指针创建单链表,程序功能菜单如图所示void showMenu(){ printf("\t\t\t\t\t\t1.使用头插法创建链表\n"); printf("\t\t\t\t\t\t2.使用尾插法创建链表\n"); printf("\t\t\t\t\t\t3.按序号查找\n"); ...

    不改变链表储存空间实现单链表的倒置

    题目中的代码已经实现了链表的基本创建、插入、删除等操作,并尝试实现链表的倒置,但未完成整个倒置过程。接下来,我们将详细解释如何完善这段代码以实现链表的完全倒置。 #### 链表倒置的实现原理 为了在原链表...

    C#单链表图形界面

    本项目聚焦于利用C#实现一个带有图形用户界面(GUI)的单链表操作系统,允许用户直观地进行生成、增删改、倒置和清空等操作。 首先,我们来详细解释单链表。单链表是一种线性数据结构,其中每个元素(称为节点)...

    利用栈实现逆置单链表

    - **特点**:插入和删除操作方便,无需移动大量数据;但查找效率较低,因为只能顺序访问。 **2. 栈** - **定义**:栈是一种特殊的数据结构,遵循“先进后出”(First In Last Out, FILO)的原则。 - **操作**:主要...

    链表和顺序表的删除有序,删除最小,合并,倒置,交换

    在处理数据操作时,如删除有序元素、删除最小元素、合并、倒置和交换等,需要理解这两种数据结构的特点并掌握相应的操作方法。 1. **链表** - 链表是一种动态数据结构,节点之间的关系通过指针来表示,而非物理...

    数据结构的8个实验报告

    实验要求学生实现单链表的插入功能,以及链表的倒置操作,这涉及到了链表节点的创建、连接以及遍历。 4. **二叉树左右子树交叉互换**: 二叉树是数据结构的一种,其每个节点最多有两个子节点。实验可能要求学生...

    单链表相关的基本操作(从文件中读入)

    在本文件中,我们探讨了如何使用C++进行单链表的相关操作,包括初始化、构建链表、插入元素、删除元素、判断链表是否为空以及倒置链表。 首先,`initLinkList`函数用于初始化链表,创建一个带头结点的空链表。这...

    实验二链表操作实现.doc

    在该实验中,链表操作实现主要包括链表的创建、插入、删除、遍历等操作。链表的创建可以通过 createList_1() 和 createList_2() 两个函数来实现,这两个函数的主要区别是 createList_1() 函数从文件中读取数据,而 ...

    链表的操作1

    这里我们将深入探讨单链表的基本操作,包括头插法、尾插法建立链表,删除节点,以及链表的倒置和循环链表的概念。 首先,让我们定义单链表的数据结构。在C语言中,我们通常使用结构体来表示链表节点。如题中所示,...

    算法与数据结构 实验一(20软件1、2、3班).docx

    (3)掌握线性表的初始化/创建、插入、查找和删除操作。 二、实验内容 (1)定义一个存储整数的顺序表和单链表。 (2)编写初始化/创建、插入、查找和删除操作的算法。 (3)编写合并两个顺序存储的有序表算法和...

    带头结点链表的各种操作(c语言)

    /*把带头结点的单链表倒置(以结点形式 )*/ node *Dao_zhi(node *head) { node *p,*s; p=head-&gt;next; head-&gt;next=NULL; while(p) { s=p; p=p-&gt;next; s-&gt;next=head-&gt;next; head-&gt;next=s; } ...

    带头结点双链循环线性表

    这种结构在处理顺序数据时提供了高效的操作,例如插入、删除和遍历。 一、结构设计 带头结点的双链循环线性表通常包含以下元素: 1. 数据域:存储实际的数据。 2. 前向指针:指向当前元素的前一个元素。 3. 后向...

    c语言链表的基本操作.rar

    2. **链表的创建**:创建链表需要动态分配内存来创建节点,并设置相应的数据和指针。在C语言中,可以使用`malloc()`或`calloc()`函数来实现。 3. **链表的插入**:在链表的特定位置插入新节点,通常分为在头部、...

    数据结构实验报告链表

    4. 链表倒置:`Opposite.h`中的`Opposite`函数实现了链表的倒置操作。它通过交换相邻节点的前后指针,将链表反转。 5. 删除偶数节点:`Delete_Double.h`的`Delete_Double`函数实现了删除链表中所有偶数节点的功能。...

    C++用链表完成学籍管理系统

    该系统旨在管理学生的基本信息,包括学号、姓名和成绩,提供一系列功能如添加学生信息、显示所有学生信息、查找特定学生、更新学生信息、删除学生信息以及倒置链表等操作。 #### 数据结构选择:链表 链表是一种...

    桂电数据结构实验一-线性表.doc

    在这个实验中,我们主要关注线性表的两种存储方式:顺序存储和链式存储,以及对线性表的一些基本操作,如插入元素、查找元素、交换元素和倒置线性表。 1. **顺序存储**:在线性表的顺序存储结构中,元素存储在一块...

Global site tag (gtag.js) - Google Analytics