连通集(浙大数据结构习题)


#include<stdio.h>
#include <stdlib.h>
#define maxsize 10
#define false 0
#define true 1typedef int vertex;    //顶点下标
typedef int weighttype;//图的邻接表建立
//1.图的节点 边,邻接表节点 头结点指针数组 图
typedef struct edgenode *edge;
struct edgenode {    /*边,通过输入边来构建图*/vertex v1, v2;//weighttype weight;    //权重
};typedef struct advnode *pvnode;   /*邻接表的邻接点链节点*/
struct advnode
{vertex v;//weighttype weight;pvnode next;
};typedef struct vnode {    //表头pvnode firstnode;//int data;      //非必须
}vlist[maxsize];      //邻接表typedef struct gnode *Lgraph;   //图
struct gnode {int N;int E;vlist Glist;
};//2.图的建立  初始化 插入边 建立图
Lgraph create(int vnum,int edgenum) {Lgraph g = (Lgraph)malloc(sizeof(struct gnode));g->N = vnum;g->E = edgenum;      //建立有vnum个顶点的图for (int i = 0; i < vnum; i++) {g->Glist[i].firstnode = NULL;   //初始化表头指针为空}return g;
}int insert(int n, pvnode *q) {pvnode temp = (pvnode)malloc(sizeof(struct advnode));temp->v = n;temp->next = NULL;pvnode current;     //记录前面的指针pvnode previous = NULL;current = *q;while (current != NULL && current->v < n) {  //找到比n大的结点,把n插在前面 找到或者current==NULLprevious = current;current = current->next;}temp->next = current;if (previous == NULL) *q = temp;else previous->next = temp;return true;
}
void insertgraph(Lgraph g, edge e) {insert(e->v2, &(g->Glist[e->v1].firstnode));insert(e->v1, &(g->Glist[e->v2].firstnode));
}Lgraph buildgraph() {Lgraph g;int nv, ne;scanf("%d %d", &nv, &ne);g = create(nv,ne);    //初始化图//输入边if(ne!=0){edge e = (edge)malloc(sizeof(struct edgenode));   //边只是起到输入的作用因此在for循环建立结点即可for(int i=0;i<ne;i++){scanf("%d %d", &e->v1, &e->v2);insertgraph(g, e);}}return g;
}//3.节点访问函数
int initiate(int visit[]) {for (int i = 0; i < maxsize; i++) visit[i] = false;return true;
}
void visitnode(int v) {printf("%d ", v);
}//4.深度优先遍历
void DFS(Lgraph g,int v,int visit[]) {visitnode(v);visit[v] = true;    //访问vpvnode w;for (w = g->Glist[v].firstnode; w; w = w->next) {  //v的所有邻接点进栈if(!visit[w->v]) DFS(g, w->v, visit);     //w2=w->firstnode   深度优先遍历 }
}//5.队列 结点 队头队尾指针 初始化 插入删除
typedef struct lnode *list;
struct lnode {int data;list nextnode;
};struct qnode {list front, gear;int Maxsize;
};
typedef struct qnode *qlist;qlist makeq() {qlist q = (qlist)malloc(sizeof(struct qnode));q->front = NULL;q->gear = NULL;return q;
}
int isempty(qlist q) {return (q->front == NULL);
}
void insertq(qlist q, int x) {list temp = (list)malloc(sizeof(struct lnode));temp->data = x;temp->nextnode = NULL;if (isempty(q)) q->front = q->gear = temp;else {q->gear->nextnode = temp;q->gear = temp;}
}
int deleteq(qlist q) {list frontcell;int frontnum;if (isempty(q)) return -1;else {frontcell = q->front;if (q->front == q->gear) {q->front =  NULL;q->gear = NULL;}else {q->front = q->front->nextnode;}frontnum = frontcell->data;}free(frontcell);return frontnum;
}//6.广度优先遍历
void BFS(Lgraph g, int v0, int visit[]) {//访问vqlist q = makeq();insertq(q, v0);visitnode(v0);visit[v0] = true;pvnode w;int i;while (!isempty(q)) {i = deleteq(q);for (w = g->Glist[i].firstnode; w; w = w->next) {  //v的所有邻接点进表if (visit[w->v] == false) {insertq(q, w->v);visitnode(w->v);visit[w->v] = true;}}}
}int main() {Lgraph g = buildgraph();int visit[maxsize];initiate(visit);for (int i = 0; i < g->N; i++) {if (!visit[i]) {printf("{");DFS(g, i, visit);printf("}\n");}}initiate(visit);for (int i = 0; i < g->N; i++) {if (!visit[i]) {printf("{");BFS(g, i, visit);printf("}\n");}}system("pause");return 0;}

连通集(浙大数据结构习题)相关推荐

  1. 浙大数据结构习题笔记:顺序表与单链表

    顺序表的顺序与链式存储 自己码了一遍两种实现方式的函数模板,都是能直接运行起来的版本. 顺序存储: #include <stdio.h> #include <malloc.h> ...

  2. 浙大数据结构习题2.6递归求简单交错幂级数和

    本题要求实现一个函数,计算下列简单交错幂级数的部分和: f(x,n)=x−x2+x3−x4+⋯+(−1)n−1xn 函数接口定义: double fn( double x, int n ); 其中题目 ...

  3. 数据结构c语言函数大全,数据结构习题库(c语言版).doc

    数据结构习题库(c语言版) 第一章 绪 论 一.基本内容 数据.数据元素.数据对象.数据结构.存储结构和数据类型等概念术语的确定含义.抽象数据类型的定义.表示和实现方法.描述算法的类C语言.算法设计的 ...

  4. c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc

    数据结构习题线性表栈队列 线性表(58) 1. 在单链表.双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.设线性表的 ...

  5. 数据结构习题精解 C语言实现+微课视频(习题解答、研考试题、微课视频)

    数据结构习题精解 C语言实现+微课视频(习题解答.研考试题.微课视频) 配套 数据结构.数据结构C语言实现等经典教材的课后习题解答,著名高校典型考研试题详解.微课视频

  6. c语言 已知某系统在通信联络中,数据结构(习题)..doc

    数据结构(习题). 题1.1 数据结构在计算机内存中的表示是指---. A.数据的存储结构 B.数据元素 C.数据的逻辑结构 D.数据元素之间的关系 题1.2 从逻辑上可把数据结构分为--. A.动态 ...

  7. 数据结构c语言版题库编程,数据结构习题库(c语言版)

    <数据结构习题库(c语言版)>由会员分享,可在线阅读,更多相关<数据结构习题库(c语言版)(104页珍藏版)>请在人人文库网上搜索. 1.wages in arrears. 2 ...

  8. 浙大python习题超详细思路(第二章)

    人生苦短,我用python https://pintia.cn/problem-sets/1111652100718116864/problems/type/7 题源来自pta 没有读者验证码,只是验 ...

  9. 浙大数据结构题集02-线性结构2 一元多项式的乘法与加法运算python版

    浙大数据结构题集02-线性结构2 一元多项式的乘法与加法运算python版 设计函数分别求两个一元多项式的乘积与和. 本文用链表做的 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数 ...

最新文章

  1. backbonejs中的模型篇(三)
  2. js源生惯性滚动与回弹(备用)
  3. linux中chkconfig 启动程序顺序介绍
  4. nth_element(a+1 , a + m, a + n+1);
  5. css线条伸缩_伸缩布局(CSS3)
  6. 前端学习(1662):前端系列实战课程之div跟随鼠标移动
  7. imread函数 matlab_【MATLAB图像处理学习】1.读取和显示图片
  8. Yolov4训练自己的数据集
  9. FD.io VPP基本介绍-理解VPP软件架构
  10. 【Tomcat】安装Tomcat服务器Tomcat的目录结构
  11. ubuntu crontab 不执行的解决方法
  12. 【Django 2021年最新版教程16】pycharm model模型修改之后如何同步更新到mysql数据库
  13. GaussDB (for Cassandra) 数据库治理:大key与热key问题的检测与解决
  14. 操作ADS1115进行4个通道AD值的读取
  15. 薛兆丰经济学课 1-1 人性与稀缺:经济学视角
  16. Codeforces Round #521 (Div. 3) E. Thematic Contests(dp)
  17. 在家干什么副业好?工作之余做什么副业比较好
  18. IDEA修改中文字体为微软雅黑
  19. linux电脑系统桌面文件怎么恢复出厂设置密码,树莓派如何恢复LXPanel面板默认设置-恢复出厂设置英文...
  20. 数组every方法使用

热门文章

  1. 绕过磊科路由器登录密码
  2. xe6 动态元素数量
  3. 人手一份!八大危险作业操作规程、作业票证(模板)、安全培训齐了~
  4. 拉勾网职位数据爬取与分析(一)
  5. linux内核-进程与进程调度
  6. 比前途,还是嵌入式开发比软件开发更胜一筹
  7. libjpeg 库的安装
  8. win 10找不到恢复环境怎么办?三种方法带你解决!
  9. k8s-client-go源码剖析(一)
  10. 单目深度估计 | Learning Depth from Monocular Videos using Direct Methods 学习笔记