数据结构C++使用邻接表实现图

本文介绍了如何使用C++通过邻接表数据结构实现图的操作,包括创建图、获取边权值、插入与删除顶点和边,以及进行广度优先遍历。此外,还选作实现了Dijkstra算法来寻找图中的最短路径。实验代码包含AQueue.h、Graph_List.h、Graph_List.cpp和main.cpp四个文件。
摘要由CSDN通过智能技术生成

定义邻接表存储的图类。
[实验要求]

(1)创建一个邻接表存储的图;
(2)返回图中指定边的权值;
(3)插入操作:向图中插入一个顶点,插入一条边;
(4)删除操作:从图中删除一个顶点,删除一条边;
(5)图的广度优先遍历;
(6)基于迪杰斯特拉算法求最短路径。【选作】

[截图]

  • 实验例图
    在这里插入图片描述

  • 邻接表

邻接表

  • 操作截图

在这里插入图片描述
[实现代码]
一共四个文件 :AQueue.h、Graph_List.h、Graph_List.cpp和main.cpp

  • AQueue.h(自己实现的队列,也可以用C++库中的标准队列需要将代码中的相关代码替换下)
#include<iostream> 
using namespace std; 
template<class T> 
class AQueue {
    
	private:  int front; /*队首所在数组元素下标*/  
	int rear; /*新元素要插入的位置(下标)*/  
	int count; /*队列中元素个数*/  
	T* QArray; /*存放队列元素的数组*/  
	int size; /*存放队列的数组规模*/ 
	public:  AQueue(int MaxQueueSize = 10); /*构造函数*/  
	~AQueue(void) {
    delete[] QArray; } /*析构函数*/  
	bool QInsert(const T& item); /*向队尾插入元素item*/  
	bool QDelete(T& item); /*删除队首元素并将该元素值保存至item*/  
	void QClear(void) {
    front = rear = count = 0; } /*清空队列*/  
	bool QFront(T& item); /*存取队首元素值*/  
	bool isEmpty(void)const {
    return count == 0; } /*检测队列是否为空*/  	
	bool isFull(void)const {
    return count == size; } /*检测队列是否为满*/ 
}; 

//构造函数
template<class T>
AQueue<T>::AQueue(int MaxQueueSize)
{
   
 size = MaxQueueSize;
 QArray = new T[MaxQueueSize];
 front = 0; rear = 0; count = 0;
}

//将元素item插入队尾
template<class T>
bool AQueue<T>::QInsert(const T& item)
{
   
 if (isFull())
 {
   
  cout << "Inserting into a full Queue!" << endl;
  return false;
 } //若队列已满
 QArray[rear] = item; //添加队尾元素
 rear = (rear + 1) % size; //修改对位指针
 count++; //队列长度+1
 return true;
}

//删除队首元素,并将其元素值赋给变量item
template<class T>
bool AQueue<T>::QDelete(T& item)
{
   
 if (isEmpty())
 {
   
  cout << "Deleting from an empty queue!" << endl;
  return false;
 }
 item = QArray[front];
 front = (front + 1) % size; //front顺时针移动一格
 count--; //队列长度-1
 return true;
}

//将队首元素值赋给变量item
template<class T>
bool AQueue<T>::QFront(T& item)
{
   
 if (isEmpty())
 {
   
  cout << "Reading from an empty queue!" << endl;
  return false;
 }
 item = QArray[front];
 return true;
}
  • Graph_List.h
#ifndef _GRAPH_LIST_H
#define _GRAPH_LIST_H
#include<iostream>
using namespace std;
const int maxsize=256;
const int maxweight=1000;
struct Edge{
   
 friend class Graph_List;
 int VerAdj;
 int cost;
 Edge *link;
};
struct Vertex{
   
 friend class Graph_List;
 int VerName;
 Edge *adjacent;
};
class Graph_List{
   
 private:
  Vertex *Head;
  int size;
 public:
  Graph_List();
  virtual ~Graph_List();
  int getweight(const int&v1,const int&v2);
  int getfirstneighbor(const int v);
  int getnextneighbor(const int v1,const int v2);
  void insterVertex(const int&v);
  void insterEdge
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值