公交线路管理

1 项目简介
本项目是对公交车线路信息的简单模拟,以完成建立公交路线信息、修改公交路线信息和删除公交路线信息等功能。
2 设计思路
本项目的实质是完成对公交线路信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
3 数据结构
公交站点之间的关系可以是任意的,任意两个站点之间都可能相关。而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。所以可以用图形结构来表示n个公交站点之间以及站点之间可能设置的公交路线,其中网的顶点表示公交站点,边表示两个站点之间的路线,赋予边的权值表示相应的距离。
因为公交路线是有一定的连续关系的,如果想输出从某一个起始点开始到某一终点结束的公交路线,就需要找到从某一顶点开始的第一个邻接点和下一个邻接点。因为在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,所以本项目使用了图的邻接表存储结构。邻接表是图的一种链式存储结构。在邻接表中,对图的每一个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对有向图是以顶点vi为尾的弧)。每个结点由三个域组成,其中邻接点域(adjvex)指示与顶点vi邻接的点在图中的位置,链域(nextarc)指示下一条边或弧的结点;数据域(info)存储和边或弧相关的信息,如权值等。每个链表上附设一个表头结点,在表头结点中,除了设有链域(firstarc)指向链表中第一个结点之外,还设有存储顶点vi的名或其它有关信息的数据域(data)。这些表头结点通常以顺序结构的形式存储,以便随机访问任意顶点的链表。程序代码如下:
【完整代码】

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define MAX_VERTEX_NUM 20

typedef int Status;
typedef char VerTexType;

typedef struct bus
{
   
	int num; //车号
	char time[30];	//发车时间
	char start[30];	//起始站
	char end[30];	//终点站
	int score;	//站数
	struct bus *next; 
 }Node,*Linklist;

typedef bus ElemType;
 
typedef struct LNode  
{
     
    ElemType data; // 数据域  
    struct LNode *next; //指针域   
}LNode,*LinkList;  

//构造邻接表 
typedef struct ArcNode	//弧的结构 
{
   
	int adjvex;	//该弧所指向的顶点的位置
	struct ArcNode *nextarc;	//指向下一条弧的指针
	int *info;	//该弧相关信息的指针 
 }ArcNode;
 
typedef struct VNode	//顶点结构 
{
   
 	VerTexType data;	//顶点信息
	ArcNode *firstarc;	//指向第一条依附该顶点的弧的指针 
 }VNode,AdjList[MAX_VERTEX_NUM];
 
typedef struct	//图的构造 
{
   
	AdjList vertices;
	int vexnum,arcnum;  //图的当前顶点数和弧数
	int kind;	//图的种类标志 
}ALGraph;

Status LocateVex(ALGraph G,int v)//查找顶点的位置 
{
   
	int i;
	for(i=0;i<G.vexnum;i++)
	{
   
		if(i==G.vertices[i].data)
			return i;
	}
}

Linklist CreateUDG(ALGraph G)
{
   
	ArcNode *p,*q;
	int i,j,k,v1,v2;
	printf("\n请输入总地点数和总路线数:");
	scanf("%d %d",&G.vexnum,&G.arcnum);
	printf("请输入各个地点名称:");
	for(i=0;i<G.vexnum;i++)
	{
   
	scanf("%d",&G.vertices[i].data);
	G.vertices[i].firstarc=NULL;	//初始化 
	} 
	printf("请输入起始站和终点站;\n");
	for(k=0;k<G.arcnum;k++)
	{
   	 
		
  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值