zoukankan      html  css  js  c++  java
  • 链表操作 基本程序

    (1)向后插入元素

    void insert_tail(link p)
    {
        link q = NULL;
        if(NULL == head)//判断head是否为空
        {
            head = p;//head为空则直接赋值
            return;
        }
        //head不为空
        //则遍历链表,直至最后一个节点
        for(q = head; q->next;q=q->next);
        q->next = p;//将新节点放置在最后一个节点的后面
        ////需要将新节点的next指针置为NULL吗?为什么?
    }
    (2) 中间插入元素


    void insert_mid(link p)
    {
        link q = NULL;
        link r = NULL;
        if(head == NULL)
            return;
        else
        {
            q = head;
            p->next = q->next;
            q->next = p;
        }
    }

    (3)插入排序


    void insert_sort(link p)
    {
        link q = NULL;
        link r = NULL;
        if(head == NULL)
        {
            head = p;
            return;
        }
        for(q = head; q; q=q->next)
        {
            if(q->item > p->item)
            {
                p->next = q;
                if(r)
                    r->next = p;//mid
                else
                    head = p;//head
                break;
            }
            r = q;
        }
        if(q == NULL)
        {
            r->next = p;//tail
        }    
    }

    (4)链表逆序


    void reverse_1()
    {
        link head1 = NULL;
        link p = NULL;
        while(head != NULL)
        {
            p = head;
            head = p->next;
            
            p->next = head1;
            head1 = p;
        };
        }
        head = head1;
    }

    void reverse_2()
    {
        link r = NULL;
        link p = NULL;
        link q = NULL;
        for(p = head;p;)
        {
            q = p->next;
            p->next = r;        
            r = p;
            p = q;        
        }
        head = r;
    }
    (6) 删除 前(后)面元素
    void del_3()
    {
        link p = NULL;
        int i = 1;
        for(i = 1; i <= 10; i++)
        {
            p = make_node(i);
            insert(p);
        }
        p = head;
        for(i = 1;i < 3;i++)
            p = p->next;
        printf("3: %d ",p->item);
        delete(p);
        free_node(p);
    }
    void del_r_3()
    {
        link p = NULL;
        link q = NULL;
        link r = NULL;
        int i = 1;
        for(i = 1; i <= 10; i++)
        {
            p = make_node(i);
            insert(p);
        }
        p = head;q = p->next;
        while(q->next)
        {
            r = p;
            p = q;
            q = q->next;
        }
        printf("r_3: %d ",r->item);
        delete(r);
        free_node(r);
    }
    void del_r_k(int k)
    {
        link p = NULL;
        link q = NULL;
        int i = 1;
        for(i = 1; i <= 10; i++)
        {
            p = make_node(i);
            insert(p);
        }
        p = head;
        for(i = 1;i < k;i++)
        {    
            if(p)
                p = p->next;
            else
                return;
        }
        q = head;
        for(;p->next;)
        {
            p = p->next;
            q = q->next;
        }
        printf("r_k: %d ",q->item);
        delete(q);
        free_node(q);
    }
    (7) 约瑟夫环
    void josphus(int M, int N)
    {
        link r = NULL;
        link p = NULL;
        link head = NULL;
        link tail = NULL;
        int i = 0;
        for(i = M; i >= 1; i--)
        {
            p = malloc(sizeof(*p));
            p->item = i;
            p->next = NULL;
            if(head == NULL)
            {
                head = p;
                tail = p;
            }
            else
            {
                p->next = head;
                head = p;
            }
        }
        tail->next = head;
        
        p = head;
        while(p!= p->next)
        {
            for(i = 1; i < N; i++)
            {
                r = p;
                p = p->next;
            }
            
            r->next = p->next;
            free(p);
            p = r->next;
        }
        printf("%d ",p->item);
        free(p);
        head = tail = NULL;
    }

  • 相关阅读:
    BigDecimal 相除时因除不尽报错
    Spring Boot 构建项目时报错:You need to run build with JDK or have tools.jar on the classpath.If this occures during eclipse build make sure you run eclipse under JDK as well (com.mysema.maven:apt-maven-plugi
    JSP页面进入时不加载数据列表
    JSP页面乱码解决方案
    JSP中直接在输入框中校验
    数据存储过程及计算
    Python 基础入门 7_4 内置模块(Math模块以及随机数模块)
    Python 基础入门 8 异常处理及文件处理
    Python 基础入门 7_3 内置模块(OS模块)
    Python 基础入门 7_2 内置模块(时间模块)
  • 原文地址:https://www.cnblogs.com/jade-L/p/3210144.html
Copyright © 2011-2022 走看看