64,666
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define MAX 50
typedef struct arcnode //弧(无权)
{
int adjvex;
struct arcnode* next;
}edge;
typedef struct vexnode//顶点表
{
int vexdata;
struct arcnode* first;
}adjlist;
typedef struct N
{
adjlist v[MAX];
int numv,nume;
}Graph;
void InsertLine(Graph* g,int v1,int v2);
void DeleteLine(Graph* g);
void main()
{
int v1,v2,i;
Graph *g=(Graph*)malloc(sizeof(Graph));
for(i=1;i<=6;i++) //建立顶点表
g->v[i].vexdata=i;
scanf("%d %d",&v1,&v2);
while (v1!=0) //边
{
InsertLine(g,v1,v2);
scanf("%d %d",&v1,&v2);
}
DeleteLine(g); //删除边
}
//********************
void InsertLine(Graph* g,int v1,int v2)
{
edge* e,*t;
e=(edge*)malloc(sizeof(edge));
e->adjvex=v2;
e->next=NULL;
if(g->v[v1].first==NULL)
g->v[v1].first=e;
else
{
t=g->v[v1].first;
while(t->next)
t=t->next;
t->next=e;
}
}
//******************************
void DeleteLine(Graph* g)
{
int v1,v2;
edge *t,*p;
printf("请输入删除的边...\n");
scanf("%d %d",&v1,&v2);
t=g->v[v1].first;
while (t->adjvex!=v2)
{
p=t;
t=t->next;
if(t==NULL){printf("不存在此边!\n");return;}
}
p->next=t->next; // p没有初值,如果while循环没进去,p就是个野指针
}