• 单链表基本操作


    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    #include <conio.h>
    #include <stdio.h>
    /*c++实现简单的单链表操作*/
    using namespace std;
    typedef struct student
    {
            int data;
            struct student *next;
    }node;
    //建立单链表 
    node *creat()
    {
         node *head,*p,*s;
         int x,cycle=1;
         head=(node *)malloc(sizeof(node));
         p=head;
         while(cycle)
         {
                     printf("\nplease input the data:");
                     scanf("%d",&x);
                     if(x!=0)
                     {
                             s=(node *)malloc(sizeof(node));
                             s->data=x;
                             printf("\n%d",s->data);
                             p->next=s;
                             p=s;
                     }
                     else
                     cycle=0;
         }
         head=head->next;
         p->next=NULL;
         printf("\n   yyy    %d",head->data);
         return head;
    }
    //单链表插入
    node *insert(node *head,int num)
    {
         node *p0,*p1,*p2;
         p1=head;
         p0=(node *)malloc(sizeof(node));
         p0->data=num;
         while(p0->data>p1->data&&p1->next!=NULL)
         {
    		  p2=p1;p1=p1->next;
    	 }
              if(p0->data<=p1->data)
         {
               if(head==p1)
               {
                           p0->next=p1;
                           head =0;
               }
               else
               {
                           p2->next=p0;
                           p0->next=p1;
               }
         }
         else
         {
             p1->next=p0;
             p0->next=NULL;
         }
         return head;
    } 
    
    //单链表测长
    int length(node *head)
    {
        int n=0;
        node *p;
        p=head;
        while(p!=NULL)
        {
                      p=p->next;
                      n++;
        }
        return n;
    } 
    
    //单链表删除某个元素 
    node *delNode(node *head,int num)
    {
         node *p1,*p2;
         p1=head;
         while(num!=p1->data&&p1->next!=NULL)
         {
               p2=p1;
               p1=p1->next;
         }
         if(num==p1->data)
         {
                          if(p1==head)
                          {
                                      head=p1->next;
                                      free(p1);
                          }
                          else
                          p2->next=p1->next;
         }
         else
             printf("\n%d could not been found!",num);
             return head;
         
    }
    
    //单链表逆 
    node *reverse(node *head)
    {
         node *p1,*p2,*p3;
         if(head==NULL||head->next==NULL)
         return head;
         p1=head,p2=head->next;
         while(p2)
         {
                  p3=p2->next;
                  p2->next=p1;
                  p1=p2;
                  p2=p3;
         } 
         head->next=NULL;
         head=p1;
         return head;
    }
    //打印单链表
    void print(node *head)
    {
         node *p;
         int n;
         n=length(head);
         printf("\nNow,These %d record are:\n",n);
         p=head;
         if(head!=NULL)
         while(p!=NULL)
         {
                       printf("\n   uuu %d   ",p->data);
                       p=p->next;
         }
    } 
    int main(int argc, char *argv[])
    {
        node *list=creat();
          print(list);
         list = delNode(list,2);
         print(list);
         int x;
         cin>>x;
         list=insert(list,x);
         print(list);
         list=reverse(list);
         print(list);
         system("PAUSE");
         
        return EXIT_SUCCESS;
    }
    

  • 相关阅读:
    礼物的最大价值
    复杂链表的复制
    全排列(回溯法)
    删除排序数组中的重复项
    三角形最小路径和(经典dp)
    链表中倒数第k个节点
    造成segment fault,产生core dump的可能原因
    wmpnetwk.exe怎么禁启动
    GSM/GPRS/EDGE/WCDMA/HSDPA/HSUPA--辨析
    OSI七层参考模型每一层都有哪些协议
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835337.html
Copyright © 2020-2023  润新知