zoukankan      html  css  js  c++  java
  • FJUT ACM 1902 增删

    什么是链表?

    就是一种增加,删除便捷的数据结构

    因为链表要用来增加和删除,所以链表所申请的内存空间应该是不固定的。

    什么是链表呢

    通过指针的指向来连接起来!因为每个数据中都会有一个指向的地址,所以按指向的地址去寻找,就算他们的地址是没有连续的,也可以通过地址的指向来连接起来!

    来看下创建的代码!

    以下代码所对应的题目是T^T online judge 1902 

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    char x[4];
    typedef struct node
    {
        int data;
        struct node *next;//创建一个指向 struct node 类型的指针,类似于int *的指针。
    } Node;//先声明一个结构体,来满足指向下一个的数的地址需求。
    Node *creat()
    {
        Node *s;/*因为使用了typedef struct node{}Node;所以Node==struct node;可以直接用Node来声明一个Node类的指针*/
        s=(Node*)malloc(sizeof(Node));//获取一个大小为Node的内存
    s->next=NULL;//s->next==s.next

    return s;
    }
     
    //申请一个如上的链表的一部分
    int main()
    {
        Node *head;
        Node *p;
        int a;
        int j;
        int n;
        int m;
        int i;
        int qq;
        int qqq;
        while(~scanf("%d%d",&n,&m))
        {
        j=0;
        i=0;
        head=creat();
        p=head;
        while(1)
        {
            Node *s;
            s=creat();
            j++;
            scanf("%d",&a);
            s->data=a;
            p->next=s;
            p=p->next;//这个p=p->next的意思就是移动到下一位;p->next=s;所以p=s;
            //if(a==-1)break;
            if(j>=n)break;
        }/*上方的代码是int main()中的截取代码,表示为创建一个大小为n个数的链表, 过程如图,

     

    就是这样创建并且连接起来的*/
    for(i=0; i<m; i++)
        {
            scanf("%s",x);
            if(x[0]=='A')
            {
                scanf("%d%d",&qq,&qqq);
                add(head,qq,qqq);
            }
            if(x[0]=='D')
            {
                scanf("%d",&qq);
                //printf("%d
    ",qq);
                del(head,qq);
            }
            //printf("..
    ");
            //dis(head);
            memset(x,0,strlen(x));
        }
        dis(head);
        clearl(head);
        }
        return 0;
    }
    /*添加的思路就是,用两个指针去走,一个在前,一个在后。然后插入,具体看下图,代码有对链表内有多个数要添加做出分析!而图示就讲一个:

    就完成了添加,多个数要添加做出分析这个不讲感兴趣的自己理解代码*/
    void add(Node *p,int x,int y)
    {
        Node *q;
        Node *s;
        q=p->next;
        while(q)
        {
            if(p->data==x)
            {
                s=creat();
                s->data=y;
                p->next=s;
                s->next=q;
                if(x==y)
                {p=p->next->next;
                q=q->next;}
                else
                    p=p->next;
            }
            else
            {
                p=p->next;
                q=q->next;
                //printf("\\..
    ");
            }
        }
        if(p->data==x)
        {//printf("..
    ");
            s=creat();
            s->data=y;
            p->next=s;
            s->next=NULL;
        }
    }
    /*删除
    删除的思路,跟添加的思路类似,也是使用两个指针去跑!
    void del(Node *p,int x)
    {
        Node *q;
        q=p->next;
        while(q)
        {
            if(q->data==x)
            {
                p->next=q->next;
                free(q);
                if(p->next!=NULL)
                    q=p->next;
                else
                    break;
            }
            else
            {
                p=p->next;
                q=q->next;
            }
        }
    }
    /*dis输出链表中的全部数值,这个较简单,只要使用head头指针去跑就可以了,图示如下

    就是不断使用p=p->next去移动地址,移向下一位后,输出p->data,就是int值。
     */
    void dis(Node *p)
    {
        p=p->next;
        while(p)
        {
            printf("%d ",p->data);
            p=p->next;
    
        }
        printf("
    ");
    }
    /*clear清空链表,就是一个递归,能理解就理解,不能理解我也没办法/摊手*/
    void clearl(Node *p)
    {
        if(p!=NULL)
        {
            clearl(p->next);
            free(p);
        }
    }
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/qq136155330/p/8251330.html
Copyright © 2011-2022 走看看