c语言数据结构图的基本操作
时间: 2023-12-05 17:40:30 浏览: 29
以下是C语言数据结构图的基本操作:
1.创建图
```c
MatrixGraph* createGraph(int verTexCount, int arcCount, GraphKind kind) {
MatrixGraph* graph = (MatrixGraph*)malloc(sizeof(MatrixGraph));
graph->verTexCount = verTexCount;
graph->arcCount = arcCount;
graph->kind = kind;
for (int i = 0; i < verTexCount; i++) {
graph->verTexs[i] = (char*)malloc(sizeof(char) * 100);
printf("请输入第%d个顶点的名称:", i + 1);
scanf("%s", graph->verTexs[i]);
}
for (int i = 0; i < verTexCount; i++) {
for (int j = 0; j < verTexCount; j++) {
graph->arcs[i][j] = 0;
}
}
for (int i = 0; i < arcCount; i++) {
int v1, v2, weight;
printf("请输入第%d条边的起点、终点和权重:", i + 1);
scanf("%d %d %d", &v1, &v2, &weight);
graph->arcs[v1][v2] = weight;
if (kind == UDG || kind == UDN) {
graph->arcs[v2][v1] = weight;
}
}
return graph;
}
```
2.销毁图
```c
void destroyGraph(MatrixGraph* graph) {
for (int i = 0; i < graph->verTexCount; i++) {
free(graph->verTexs[i]);
}
free(graph);
}
```
3.添加顶点
```c
void addVertex(MatrixGraph* graph, char* vertex) {
graph->verTexs[graph->verTexCount] = vertex;
graph->verTexCount++;
}
```
4.添加边
```c
void addEdge(MatrixGraph* graph, int v1, int v2, int weight) {
graph->arcs[v1][v2] = weight;
if (graph->kind == UDG || graph->kind == UDN) {
graph->arcs[v2][v1] = weight;
}
}
```
5.删除顶点
```c
void deleteVertex(MatrixGraph* graph, int v) {
for (int i = v; i < graph->verTexCount - 1; i++) {
graph->verTexs[i] = graph->verTexs[i + 1];
}
graph->verTexCount--;
for (int i = v; i < graph->verTexCount; i++) {
for (int j = 0; j < graph->verTexCount; j++) {
graph->arcs[i][j] = graph->arcs[i + 1][j];
}
}
for (int i = v; i < graph->verTexCount; i++) {
for (int j = 0; j < graph->verTexCount; j++) {
graph->arcs[j][i] = graph->arcs[j][i + 1];
}
}
}
```
6.删除边
```c
void deleteEdge(MatrixGraph* graph, int v1, int v2) {
graph->arcs[v1][v2] = 0;
if (graph->kind == UDG || graph->kind == UDN) {
graph->arcs[v2][v1] = 0;
}
}
```