zoukankan      html  css  js  c++  java
  • 单链表的创建、插入、删除、倒置操作

    /*---------------------------------------------------*/
        /*--------------单链表的创建、插入、删除、倒置操作-----------*/
        /*--------------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();
        }


    作者:水木    
     
  • 相关阅读:
    配置SecondaryNameNode
    hadoop 根据secondary namenode恢复namenode
    Hadoop如何修改HDFS文件存储块大小
    hadoop1.2.1 datanode 由于权限无法启动 expected: rwxr-xr-x
    CentOS 7 下,如何设置DNS服务器
    Eclipse+pydev环境搭建
    Python numpy
    Leetcode#54 Spiral Matrix
    Leetcode#53 Maximum Subarray
    Leetcode#40 Combination Sum II
  • 原文地址:https://www.cnblogs.com/hsapphire/p/1615647.html
Copyright © 2011-2022 走看看