数据结构作业之邻接表的插入和删除

数据结构作业之邻接表的插入和删除

/**/ /*张宏数据结构(第七章_图)作业:
题目描述:在有向图中
(1)增加一条弧  Addarc(adj,u,v)
(2)删除一条弧  Delarc(adj,u,v)
*/

#include
< iostream >
#include
< cmath >
#include
< cstdio >
#include
< algorithm >
#include
< string >
using   namespace  std;
#define  MAX 1000000

struct  node 
{
    
int adjvex;
    node
* next;
}
adj[MAX];

int  Create(node adj[], int  n, int  m) // 邻接表建表函数,n代表定点数,m代表边数
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{

        adj[i].adjvex
=i;
        adj[i].next
=NULL;
    }

    
for(i=1;i<=m;i++)
    
{
        cout
<<"请输入第"<<i<<"条边:";
        
int u,v;
        cin
>>u>>v;
        p
=new node;
        p
->adjvex=v;
        p
->next=adj[u].next;
        adj[u].next
=p;
    }

    
return 1;
}



int   Addnode( int  u, int  v) // 此函数用于增加边
{

    node 
*p;
    p
=new node;
    p
->adjvex=v;
    p
->next=adj[u].next;
    adj[u].next
=p;
    
return 1;
}



int  deletenode( int  u, int  v) // 此函数用于边的删除
{

    node 
*P=adj[u].next;
    node 
*q=&adj[u];
    
while(P!=NULL)
    
{

        
if(P->adjvex==v)
        
{
            q
->next=P->next;
            delete P;
            
break;
        }


    }

    
return 1;
}


void  print( int  n) // 邻接表打印函数
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{
        p
=&adj[i];
        
while(p!=NULL)
        
{
            cout
<<p->adjvex<<' ';
            p
=p->next;
        }

        cout
<<endl;
    }

}



int  main()
{

    
int n;
    
int m;
    cout
<<"                         数据结构第七章(图)作业"<<endl;
    cout
<<"                                    "<<endl;
    cout
<<"题目描述:"<<endl;
    cout
<<"有向图中(1)增加一条弧  Addarc(adj,u,v)"<<endl;
    cout
<<"        (2)删除一条弧  Delarc(adj,u,v)"<<endl<<endl<<endl;
    cout
<<"请输入顶点的数目: ";
    cin
>>n;
    cout
<<"请输入邻边的数目: ";
    cin
>>m;
    Create(adj,n,m);
    cout
<<"输入的邻接表为:"<<endl;
    print(n);
    
int u,v;
    cout
<<"接下来执行添加操作,请输入边u,v(注意请不要和上表中的边重复):";
    cin
>>u>>v;
    Addnode(u,v);
    cout
<<"此时邻接表为:"<<endl;
    print(n);
    cout
<<"接下来执行删除操作,请输入边u,v:";
    cin
>>u>>v;
    deletenode(u,v);
    cout
<<"此时邻接表为:"<<endl;
    print(n);
    cout
<<"演示结束,谢谢您的使用"<<endl;
    
return 0;
}


数据结构作业之邻接表的插入和删除_第1张图片

你可能感兴趣的:(数据结构作业之邻接表的插入和删除)