数据结构——图-有向带权图的邻接表

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#define VertexType char //顶点的数据类型(char) 
#define VertexMax 20 //最大顶点个数 typedef struct ArcNode//边表 
{int adjvex;//存储的是该顶点在顶点数组即AdjList[]中的位置int weight; struct ArcNode *next;
}ArcNode;typedef struct VNode //单个顶点 
{VertexType vertex;struct ArcNode *firstarc;
}VNode;typedef struct //顶点表 
{VNode AdjList[VertexMax];//由顶点构成的结构体数组 int vexnum,arcnum; //顶点数和边数 }ALGraph;int LocateVex(ALGraph *G,VertexType v)
{    int i;for(i=0;i<G->vexnum;i++){if(v==G->AdjList[i].vertex){return i;}}printf("No Such Vertex!\n");return -1;
}void CreateDG(ALGraph *G)
{int i,j;//1.输入顶点数和边数 printf("有向带权图\n"); printf("输入顶点个数和边数:\n");printf("顶点数 n="); scanf("%d",&G->vexnum);printf("边  数 e="); scanf("%d",&G->arcnum);printf("\n\n"); //2.顶点表数据域填值初始化顶点表指针域 printf("输入顶点元素(需要用空格隔开):");for(i=0;i<G->vexnum;i++){scanf(" %c",&G->AdjList[i].vertex);G->AdjList[i].firstarc=NULL;} printf("\n");//3.输入边信息构造邻接表 int n,m;VertexType v1,v2;ArcNode *p1; int value;printf("请输入边的信息(需要用空格隔开)包含边的两端和权值:\n\n"); for(i=0;i<G->arcnum;i++){   //输入边信息,并确定v1和v2在G中的位置,即顶点在AdjList[]数组中的位置(下标)  printf("输入第%d条边信息:",i+1); getchar();scanf(" %c %c %d",&v1,&v2,&value);n=LocateVex(G,v1);m=LocateVex(G,v2);if(n==-1||m==-1){printf("NO This Vertex!\n");return;} p1=(ArcNode *)malloc(sizeof(ArcNode));p1->adjvex=m;//填上坐标 p1->weight=value;p1->next=G->AdjList[n].firstarc;//改链(头插法)  G->AdjList[n].firstarc=p1;}} 
void print(ALGraph G)
{int i;ArcNode *p;printf("\n-------------------------------");printf("\n图的邻接表表示:\n");for(i=0;i<G.vexnum;i++){printf("\n   AdjList[%d]%4c",i,G.AdjList[i].vertex);p=G.AdjList[i].firstarc;while(p!=NULL){printf("-->%d权值[%d]",p->adjvex,p->weight);p=p->next;}} printf("\n");
} void InsertVex(ALGraph *G,VertexType v)
{//向邻接表中添加一个新顶点G->AdjList[G->vexnum].vertex=v;G->AdjList[G->vexnum].firstarc=NULL;G->vexnum=G->vexnum+1;
}void InsertArc(ALGraph *G,VertexType v,VertexType w)
{//添加一条新边到邻接表 int value;printf("输入这条边的权值:");scanf("%d",&value);ArcNode *p1; int n,m;n=LocateVex(G,v);m=LocateVex(G,w);p1=(ArcNode *)malloc(sizeof(ArcNode));p1->adjvex=m;//填上坐标 p1->weight=value;p1->next=G->AdjList[n].firstarc;//改链(头插法)  G->AdjList[n].firstarc=p1;G->arcnum++;} void DeleteArc(ALGraph *G,VertexType v,VertexType w)
{//删除一条指定的边 int n,m;n=LocateVex(G,v);m=LocateVex(G,w);ArcNode *pre,*p;pre=G->AdjList[n].firstarc;p=pre->next;while(p!=NULL){if(pre->next->adjvex==p->adjvex){pre->next=p->next;free(p);break;}p=p->next;pre=pre->next;}G->arcnum--; }void DeleteVex(ALGraph *G,VertexType v)
{int n;n=LocateVex(G,v);int arcn=0;ArcNode *p;p=G->AdjList[n].firstarc;while(p!=NULL){p=p->next;arcn++;}G->AdjList[n].firstarc=NULL;for(int i=n;i<G->vexnum-1;i++){G->AdjList[i].firstarc=G->AdjList[i+1].firstarc;G->AdjList[i].vertex=G->AdjList[i+1].vertex;}G->vexnum--;G->arcnum=G->arcnum-arcn;} void choice(ALGraph *G)
{int i=0;int j=1;VertexType v,w;printf("[1]:添加的新顶点\n");printf("[2]:添加新边的两端结点\n");printf("[3]:删除边的两端结点\n");printf("[4]:删除的顶点(及其相关联的边)\n");printf("[5]:退出\n");while(j){scanf("%d",&i);switch(i){case 1:printf("输入要添加的新顶点:");getchar();scanf("%c",&v); InsertVex(G,v);print(*G);break;case 2:printf("输入要添加新边的两端结点:");getchar();	scanf("%c %c",&v,&w); InsertArc(G,v, w);print(*G);break;case 3:printf("输入要删除边的两端结点:");getchar();scanf("%c %c",&v,&w); DeleteArc(G,v, w);print(*G);break;case 4:printf("输入要删除的顶点(及其相关联的边):");getchar();scanf("%c",&v); DeleteVex(G,v);print(*G);break;case 5:j=0;break;}	}} 
int main() 
{ALGraph G;CreateDG(&G);print(G);choice(&G);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core使用HostingStartup增强启动操作

概念在ASP.NET Core中我们可以使用一种机制来增强启动时的操作&#xff0c;它就是HostingStartup。如何叫"增强"操作&#xff0c;相信了解过AOP概念的同学应该都非常的熟悉。我们常说AOP使用了关注点分离的方式&#xff0c;增强了对现有逻辑的操作。而我们今天要说的…

计算机网络实验arp协议分析,计算机网络ARP地址协议解析实验报告

计算机网络ARP地址协议解析实验报告 (5页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分计算机网络实验报告、实验目的:1. 掌握ARP协议的报文格式2. 掌握ARP协议的工作原理3. 理解ARP高速缓存…

数据结构——图-最短路径长度中最大的一个

#include<stdio.h> #include<string.h> #define INF 32767 #define MAXVEX 30 int dist[MAXVEX]; //建立dist数组int path[MAXVEX]; //建立path数组int S[MAXVEX]; //建立S数组typedef char VertexType;typedef struct graph {int n,e;VertexType vexs[MAXVE…

一个情怀引发的生产事故

在一个项目中&#xff0c;需要轻量级用到脚本语言&#xff0c;来提高应用服务的灵活性。因为知道Roslyn可以动态编辑C#&#xff0c;本着情怀&#xff0c;就自然用Roslyn来处理这块业务了。开在windows上执行&#xff0c;一次调用风平浪静&#xff0c;因为这个功能使用频次不高&…

python standardscaler_教你用python一步步解决“维度灾难”

全文共7016字&#xff0c;预计学习时长40分钟或更长现代科技时代产生和收集的数据越来越多。然而在机器学习中&#xff0c;太多的数据可不是件好事。某种意义上来说&#xff0c;特征或维度越多&#xff0c;越会降低模型的准确性&#xff0c;因为需要对更多的数据进行泛化——这…

c++的输入和输出

1. 输入/输出流的成员函数 put()函数 put函数常用的调用形式&#xff1a; cout.put(char ch); 功能&#xff1a;用于输出一个字符&#xff0c;还可以是ASCII代码&#xff08;或者是ASCII表达式&#xff09; cout.put(65)&#xff1b; get()函数 常用形式为&#xff1a;cin.g…

被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?

一&#xff1a;背景 1. 讲故事前几天公号里有一位朋友留言说&#xff0c;你windbg玩的溜&#xff0c;能帮我分析下被 ThreadStatic 修饰的变量到底存放在哪里吗&#xff1f;能不能帮我挖出来????????????&#xff0c;其实这个问题问的挺深的&#xff0c;玩高级语言…

唐山师范学院计算机论文,唐山师范学院校园网络解决方案 毕业论文

唐山师范学院校园网络解决方案 毕业论文 (43页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.90 积分1 唐山师范学院 专 科毕业论文 题 目 唐山师范学院校园网络解决方案 学 生 指导教师 年 级 200…

基本系统设备感叹号更新不了_电脑识别不了U盘?别紧张,免费教你如何解决...

你的电脑会出现识别不了U盘的情况吗&#xff1f;为什么会识别不了U盘你了解过吗&#xff1f;首先我们说一下&#xff0c;U盘作为一个办公必备品&#xff0c;用来存储文件以便随时使用&#xff0c;简单方便。但是如果某一天你的电脑突然之间无法识别U盘的话&#xff0c;就代表新…

群同态基本定理证明_群论(7): 群代数, 群表示基础

内容提要:1 群代数; 2 域上的有限维群代数和Maschke定理; 3 函数环; 4 代数闭域上的群表示论; 本文主要参考文献.本文的前置内容为:格罗卜&#xff1a;群论(1): 群, 同构定理, 循环群格罗卜&#xff1a;群论(2): 群作用, Sylow定理更多内容&#xff0c;请移步专栏目录:格罗卜&a…

c++的文件输入/输出

1文件的概述 根据文件中数据的组织形式分为&#xff1a; 1 文本文件 文本文件又称ASCII文件&#xff0c;它的每一个字节存放一个ASCII代码&#xff0c;代表一个字符 输出文本&#xff1a;接收从内存输出的数据 输出文件&#xff0c;向它写入数据 ofstream fout; 输入文件&…

南阳理工计算机全国排名,全国工科实力最强的10所高校排名,

评价工科实力一个非常明显的指标就是学科实力&#xff0c;2017年公布的第四次学科评估结果就是最好的参考。下面就以学科评估排名全国5%的学科数作为评比基准&#xff0c;对国内主要高校的工科实力进行一个排名&#xff0c;结果如下&#xff1a;前3甲&#xff1a;清华大学、浙江…

真正的高手,都有增长思维!(深度好文)

点击蓝字关注&#xff0c;回复“职场进阶”获取职场进阶精品资料一份职场&认知洞察 丨 作者 / findyi这是findyi公众号分享的第99篇原创文章最近几年互联网红利消亡&#xff0c;老板们非常焦虑。这也一度让所谓的「首席增长官」被媒体热炒。仿佛来一个增长的救世主&#xf…

service层中有某个事物要立马提交_硬货你要的,binder机制来了

欢迎关注专栏&#xff1a;里面定期分享Android和Flutter架构技术知识点及解析&#xff0c;还会不断更新的BATJ面试专题&#xff0c;欢迎大家前来探讨交流&#xff0c;如有好的文章也欢迎投稿。Android高级进阶​zhuanlan.zhihu.com前言Binder做为Android中核心机制&#xff0c;…

学习笔记 | 传统企业互联网改革之道

【学习笔记】| 作者 / Edison Zhou这是EdisonTalk的第306篇学习分享最近在看刘润老师的《互联网战略版&#xff1a;传统企业&#xff0c;互联网在踢门》&#xff0c;学习了传统企业互联网改革的价值模型与三大模式&#xff0c;醍醐灌顶受益良多。因此&#xff0c;我将我学到的总…

蓝桥杯杂题

蓝桥杯杂题开始聊天吧气球升起度熊所居住开始聊天吧 #include<bits/stdc.h> using namespace std; set<char>S; int main() {string s;while(cin>>s){S.clear();for(auto x:s)//使用x拷贝s字符串 中的每一个字符 {S.insert(x); //将每一个字符插入到集合S中/…

setnx是原子操作吗_谈谈Volatile关键字?为什么不能保证原子性?用什么可以替代?为什么?...

大家好&#xff0c;欢迎关注我的公众号码猿bug,需要资料的话可以加我微信好友。再谈volatile关键字之前&#xff0c;首先必须聊聊JMM内存模型&#xff01;JMM主要的特性&#xff1a;可见性、原子性&#xff0c;顺序性Java 虚拟机规范试图定义一种 Java 内存模型&#xff08;JMM…

360 屏蔽ajax,怎么在easy ui做全局Ajax拦截啊?

满意答案egiuas2014.08.13采纳率&#xff1a;53% 等级&#xff1a;9已帮助&#xff1a;167人在web.xml中定义一个全局过滤器拦截所有请求&#xff1a;自定义filter your difine filter name /* 后台代码&#xff1a;过滤器中获取session用户对象 如果为空&#xff0c;返回超…

用python排序算法_Python - 八大排序算法

1、序言 本文使用Python实现了一些常用的排序方法。文章结构如下&#xff1a; 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.简单选择排序 6.堆排序 7.归并排序 8.基数排序 上述所有的排序均写在一个Python自定义类中&#xff0c;作为成员函数。 2、排序方法详细介绍 1.…

剑指offer-数组中的重复的数字-p39

数组 c中的STL中的vector (STL中的vector每次扩容量时&#xff0c;新的容量都是之前一次的两倍) 在c/c中&#xff0c;数组和指针是相互关联又有区别的两个概念。 关联&#xff1a;当我们声明一个数组时&#xff0c;其数组的名字也是一个指针&#xff0c;该指针指向数组的第一个…