c++实现邻接表

#include<iostream>
using namespace std;

const int MAX = 10;
//声明边表结点
struct edge_node
{
	int adjvex; //邻接点域,储存该顶点对应的下标
	int weight; //权值
	edge_node *next; //指向边表下一个结点
};

//声明顶点表结点
struct vertex_node
{
	char vertex;  //顶点
	edge_node *first_edge; //指向边表第一个结点
};

class Graph
{
private:
	vertex_node adjlist[MAX]; //存放顶点的数组
	int vertex_num; //顶点数
	int edge_num; //边数
public:
	Graph(); //构造函数
	int locate(char ch); //定位
	void print(); //打印
};


//定位
int Graph::locate(char ch)
{
	int i = 0;
	for (i = 0; i < this->vertex_num; i++)
	{
		if (this->adjlist[i].vertex == ch)
		{
			break;
		}
	}
	return i;
}

//打印
void Graph::print()
{
	int i = 0;
	while (this->adjlist[i].first_edge != nullptr && i < this->vertex_num)
	{
		cout << "顶点:" << this->adjlist[i].vertex;
		edge_node *s = nullptr;
		s = this->adjlist[i].first_edge;
		while (s != nullptr)
		{
			cout << "->"
				<< "(" << s->adjvex
				<< "," << s->weight << ")";
			 s = s->next;
		}
		i++;
		cout << endl;
	}
}

//构造函数
Graph::Graph()
{
	int i = 0, j = 0, k = 0, w = 0;
	cout << "请输入顶点数和边数:" << endl;
	cin >> this->vertex_num >> this->edge_num;

	 
	cout << "请依次输入顶点:" << endl;
	for (i = 0; i < this->vertex_num; i++)
	{
		cin >> this->adjlist[i].vertex;
		this->adjlist[i].first_edge = nullptr;
	}


	cout << "请输入两个顶点及其权值:" << endl;
	for (k = 0; k < this->edge_num; k++)
	{
		char first, second;
		edge_node *s, *e = nullptr;

		cin >> first >> second >> w;
		i = this->locate(first);
		j = this->locate(second);
		s = new edge_node;
		s->adjvex = j;
		s->weight = w;
		s->next = this->adjlist[i].first_edge;
		this->adjlist[i].first_edge = s;

		//无向图
		e = new edge_node;
		e->adjvex = i;
		e->weight = w;
		e->next = this->adjlist[j].first_edge;
		this->adjlist[j].first_edge = e;
	}

	
}


int main()
{

	Graph g;
	g.print();
	system("pause");
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值