zoukankan      html  css  js  c++  java
  • 单链表操作---建表,查找,删除

    数据结构上机测试2-1:单链表操作A


    Time Limit: 1000ms   Memory limit: 4096K  有疑问?点这里^_^

    题目描述

    输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。分别输出建立的初始单链表和完成删除后的单链表。

    输入

    第一行输入数据个数n;
    第二行依次输入n个整数;
    第三行输入欲删除数据m。

    输出

    第一行输出原始单链表的长度;
    第二行依次输出原始单链表的数据;
    第三行输出完成删除后的单链表长度;
    第四行依次输出完成删除后的单链表数据。

    示例输入

    10
    56 25 12 33 66 54 7 12 33 12
    12

    示例输出

    10
    56 25 12 33 66 54 7 12 33 12
    7
    56 25 33 66 54 7 33
    
    
    #include<stdio.h>  
    #include<stdlib.h>  
      
    struct node  
    {  
        int data;  
        struct node *next;  
    };  
      
    void del(struct node *head, int key, int n)  
        {  
            int i, count=0;  
            struct node *p, *q;  
            p = head;  
            while(p->next!=NULL)  
            {  
                if(p->next->data == key)  
                {  
                    q = p->next;  
                    p->next = q->next;  
                    free(q);  
                    count ++;  
                }  
                else  
                    p = p->next;  
            }  
            printf("%d
    ", n-count);  
            head = head->next;  
            for(i=0; i<n-count; i++)  
            {  
                printf("%d", head->data);  
                if(i<n-1)  
                    printf(" ");  
                else  
                    printf("
    ");  
                head = head->next;  
            }  
        }  
      
    int main()  
    {  
        int n, i, key;  
        struct node *head, *tail, *p, *q;  
        head = (struct node *)malloc(sizeof(struct node));  
        head->next = NULL;  
        tail = head;  
        q = head;  
        scanf("%d", &n);  
        for(i=0; i<n; i++)  
        {  
            p = (struct node *)malloc(sizeof(struct node));  
            scanf("%d", &p->data);  
            p->next = NULL;  
            tail->next = p;  
            tail = p;  
        }  
        scanf("%d", &key);  
        printf("%d
    ", n);//输出原单链表的长度  
                         //PS:wa了两次,原因没看清要输出原单链表的长度,一定要认真读题啊  
        q = q->next;  
        for(i=0; i<n; i++)//输出原单链表  
        {  
            printf("%d", q->data);  
            if(i<n-1)  
                printf(" ");  
            else  
                printf("
    ");  
            q = q->next;  
        }  
      
        del(head, key, n);//完成删除key值,并输出  
      
        return 0;  
    }  


    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    springmvc两种非注解的处理器适配器
    springmvc两种非注解的处理器映射器
    java线程数据交换Exchanger
    java计数器CountDownLatch
    java路障CyclicBarrier
    java线程condition
    java模拟数据库缓存
    java中的递归
    面向对象
    全概率公式和贝叶斯准则
  • 原文地址:https://www.cnblogs.com/6bing/p/3931262.html
Copyright © 2011-2022 走看看