zoukankan      html  css  js  c++  java
  • 3.14(链表练习)

    题目:编写一个程序,将一个图读入邻接表,

    (1)链表:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    struct Node{
        int data;
        struct Node* next;
    };
    
    struct H{
        int id;
        struct Node* First;
        struct H* next;
    };
    typedef struct H* Tu;
    
    Tu Find(int id,Tu L)
    {
        Tu p=L->next;
        while(p->id!=id&&p!=NULL) p=p->next;
        return p;
    }
    
    void Insert(int x,Tu L)
    {
        Node *h=L->First,*tp,*p;
        p=h;
        while(p->next!=NULL) p=p->next;
        tp=(Node*)malloc(sizeof(struct Node));
        tp->data=x;
        tp->next=NULL;
        p->next=tp;
    }
    
    int main(void)
    {
        Tu h,p,tp;
        struct Node *p1,*p2;
        int n,m,x,y,i;
        cin>>n>>m;
        h=(Tu)malloc(sizeof(struct H));
        h->next=NULL;
        p=h;
        for(i=1;i<=n;i++)
        {
            tp=(Tu)malloc(sizeof(struct H));
            tp->id=i;
            tp->First=(Node*)malloc(sizeof(struct Node));
            tp->First->next=NULL;
            tp->next=p->next;
            p->next=tp;
            p=p->next;
        }
        
        for(i=0;i<m;i++)
        {
            cin>>x>>y;
            p=Find(x,h);
            Insert(y,p);
            
            p=Find(y,h);
            Insert(x,p);
        }
        
        p=h->next;
        while(p!=NULL)
        {
            p1=p->First->next;
            while(p1!=NULL) 
            {
                printf("(%d,%d) ",p->id,p1->data);
                p1=p1->next;
            }
            printf("
    ");
            p=p->next;
        }
        return 0;
    }
    View Code

    (2)游标

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    const int maxn = 120;
    
    struct Node1{
        int x1,next1;
    };
    struct Node1 cur1[maxn];
    typedef int List1;
    typedef List1 Position1;
    
    void Init1()
    {
        int i;
        for(i=0;i<maxn;i++) cur1[i].next1=i+1;
        cur1[i].next1=0;
    }
    
    Position1 Malloc1()
    {
        Position1 p;
        p=cur1[0].next1;
        cur1[0].next1=cur1[p].next1;
        return p;
    }
    
    void Free1(Position1 p)
    {
        cur1[p].next1=cur1[0].next1;
        cur1[0].next1=p;
    }
    
    Position1 Find1(int x,List1 L)
    {
        Position1 p=cur1[L].next1;
        while(cur1[p].x1!=x&&p!=0)
        {
            p=cur1[p].next1;
        }
        return p;
    }
    
    Position1 FindEnd(List1 L)
    {
        List1 p=L;
        while(cur1[p].next1!=0)
        {
            p=cur1[p].next1;
        }
        return p;
    }
    
    void Insert1(int x,List1 L)
    {
        Position1 tp=Malloc1(),p;
        p=FindEnd(L);
        cur1[tp].x1=x;
        cur1[tp].next1=cur1[p].next1;
        cur1[p].next1=tp;
    }
    
    void Print1(Position1 L1)
    {
        Position1 p1=cur1[L1].next1;
        while(p1!=0)
        {
            printf("%d ",cur1[p1].x1);
            p1=cur1[p1].next1;
        }
        printf("
    ");
    }
    
    struct Node2{
        int x2,next2,first;
    };
    struct Node2 cur2[maxn];
    typedef int List2;
    typedef List2 Position2;
    
    void Init2()
    {
        int i;
        for(i=0;i<maxn;i++) cur2[i].next2=i+1;
        cur2[i].next2=0;
    }
    
    int Malloc2()
    {
        Position2 p;
        p=cur2[0].next2;
        cur2[0].next2=cur2[p].next2;
        return p;
    }
    
    void Free2(Position2 p)
    {
        cur2[p].next2=cur2[0].next2;
        cur2[0].next2=p;
    }
    
    Position2 Find2(int x,Position2 L2)
    {
        Position2 p=cur2[L2].next2;
        while(cur2[p].x2!=x&&p!=0)
        {
            p=cur2[p].next2;
        }
        return p;
    }
    
    void Insert2(int x,List2 L,Position2 p)
    {
        Position2 tp=Malloc2();
        cur2[tp].x2=x;
        cur2[tp].first=Malloc1();
        cur1[cur2[tp].first].next1=0;
        cur2[tp].next2=cur2[p].next2;
        cur2[p].next2=tp;
    }
    
    void Print2(List2 L2)
    {
        Position2 p2=cur2[L2].next2;
        while(p2!=0)
        {
            printf("点%d的邻接点有:
    ",cur2[p2].x2); 
            Print1(cur2[p2].first);
            p2=cur2[p2].next2;
        }
        printf("
    ");
    }
    
    int main(void)
    {
        int n,m,i,x,y;
        cin>>n>>m;
        Init1();
        Init2();
        List2 L2,p2;
        L2=Malloc2();
        cur2[L2].next2=0;
        p2=L2;
        for(i=1;i<=n;i++)
        {
            Insert2(i,L2,p2);
            p2=cur2[p2].next2;
        }
        List1 p1,L1;
        while(m--)
        {
            cin>>x>>y;
            p2=Find2(x,L2);
            Insert1(y,cur2[p2].first);
            
            p2=Find2(y,L2);
            Insert1(x,cur2[p2].first);
        }
        
        Print2(L2);
        return 0;
    }
    View Code
  • 相关阅读:
    JVM详解(十)——垃圾回收算法
    JVM详解(九)——StringTable
    JVM详解(八)——执行引擎
    JVM详解(七)——直接内存
    JVM详解(六)——对象的实例化、内存布局与访问定位
    JVM详解(五)——运行时数据区-方法区
    JVM详解(四)——运行时数据区-堆
    http发送url请求
    超简单超详细的redis安装教程
    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'bookID' not found. Available parameters are [param1, bookId]解决问题
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10029375.html
Copyright © 2011-2022 走看看