首页 > 其他分享 >数据结构刷题

数据结构刷题

时间:2023-07-18 11:24:28浏览次数:41  
标签:Node vis int next -- 数据结构 data 刷题

山理工数据结构刷题

专题1--顺序表

专题2--栈和队列

专题3--串和数组

专题4--二叉树

专题5--二叉查找树和平衡二叉树

树结构练习——排序二叉树的中序遍历

#include <bits/stdc++.h>
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
typedef pair<int, int> PII;
const int N = 100008;
typedef struct BSNode {
	int data;
	struct BSNode* lchild;
	struct BSNode* rchild;
} BSNode, *BSTree;

void BSinsert(BSTree &T, int key) {
	if (T == NULL) {
		T = new BSNode;
		T->lchild = NULL;
		T->rchild = NULL;
		T->data = key;
	}

	else if (key < T->data) {
		BSinsert(T->lchild, key);
	} else {
		BSinsert(T->rchild, key);
	}
}

void LDR(BSTree T) {
	if (T == NULL) {
		return;
	}
	LDR(T->lchild);
	cout << T->data << ' ';
	LDR(T->rchild);
}
int main () {
	int n;
	while (scanf("%d", &n) != EOF) {
		BSTree T = NULL;
		for (int i = 1; i <= n; i++) {
			int key;
			cin >> key;
			BSinsert(T, key);
		}
		LDR(T);
		printf("\n");
	}



	return 0;
}

专题6--堆、哈夫曼树

专题9--图的遍历DFS&BFS

数据结构实验之图论二:图的深度遍历

#include <bits/stdc++.h>

using namespace std;
const int N = 200;
int g[N][N] = {0};//邻接矩阵存图
bool vis[N] = {false};//标记数组
int k, m;
void dfs(int x) {
	cout << x << ' ';//打印结果
	vis[x] = true;//标记为已经访问
	for (int i = 0; i < k; i++) {//从0遍历到k
		if (vis[i] == false && g[x][i] == 1) { //该点没被访问过,并且该点可以联通
			dfs(i); //递归调用这个函数
		}
	}
}
int main () {
	int t;
	cin >> t;
	while (t--) {
		memset(g, 0, sizeof(g));
		memset(vis, false, sizeof (vis));//每次对数组进行初始化
		cin >> k >> m;
		for (int i = 1; i <= m; i++) {
			int u, v;
			cin >> u >> v;
			g[u][v] = 1; //建立无向图
			g[v][u] = 1; //建立无向图
		}
		dfs(0);//开始搜索
		cout << '\n';
	}
	return 0;
}

数据结构实验之图论二:图的深度遍历

#include <bits/stdc++.h>
using namespace std;
const int N = 120;

struct Node {
	int data;//数据域
	struct Node* next;//指针域
};
//typedef struct node Node;

Node* head[N];//头指针数组
bool vis[N];//标记数组
int n, m, s;
Node* p = NULL;
void bfs(int s) {
	for (int i = 0; i < m; i++) {//冒泡排序
		for (Node *p = head[i] -> next; p; p = p -> next) {
			for (Node *q = p -> next; q; q = q -> next) {
				if (p -> data > q -> data) {
					int tmp = p -> data;
					p -> data = q -> data;
					q -> data = tmp;
				}
			}
		}
	}
	//下面开始bfs
	int q = 0;
	queue <int > Q;
	Q.push(s);//将起点放入队列
	vis[s] = true; //将起点标记为已经访问
	while (!Q.empty()) { //只要队列不为空
		q = Q.front();
		cout << q << ' ';
		Q.pop();
		for (p = head[q]->next; p != NULL; p = p->next) {
			if (vis[p->data] == false) { //如果未访问过
				vis[p->data] = true; //现在进行访问
				Q.push(p->data);
			}

		}

	}


}
int main () {
	int k;
	cin >> k;
	for (int i = 0; i < N; i++) {
		head[i] = new Node; //初始化头指针数组
	}
	while (k--) {
		memset(vis, 0, sizeof vis); //初始化标记数组
		cin >> n >> m >> s;

		for (int i = 0; i < n; i++) {
			head[i]->next = NULL; //初始化头指针数组
		}

		for (int i = 1; i <= m; i++) {
			int u, v;
			cin >> u >> v;
			p = new Node; //建立新节点
			p->data = v;
			p->next = head[u]->next; //让新节点指向首元节点
			head[u]->next = p; //头插法
			p = new Node;
			p->data = u;
			p->next = head[v]->next;
			head[v]->next = p; //头插法
		}
		bfs(s);//从开始搜索
		printf("\n");

	}
	return 0;
}

标签:Node,vis,int,next,--,数据结构,data,刷题
From: https://www.cnblogs.com/harper886/p/17562373.html

相关文章

  • 数据结构练习笔记——删除单链表中相同元素
    删除单链表中相同元素【问题描述】单链表中存放了若干整数,请删除相同整数。【输入形式】单链表【输出形式】删除相同整数后的单链表【样例输入】11123【样例输出】123【样例说明】递增的形式输入数据,允许相同元素#include<stdlib.h>#include<iostream>usingname......
  • 哈希数据结构
    参考链接:https://blog.csdn.net/CRMEB/article/details/1208206821.哈希表哈希表,即散列表(Hashtable),是根据keyvalue而直接进行访问的数据结构。也就是说,它通过把keyvalue映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。......
  • 数据结构
    数据结构中的基本概念  数据:任何能够输入到计算机中,能被程序处理的描述客观事物的符号  数据项:有独立含义的最小单位,也叫做数据域、域  数据元素:组成数据的、有一定意义的基本单位,也叫作节点、结点、顶点(一个数据元素是由若干项数据项组成)  数据结构:相互之间......
  • 7.17 数据结构
    线段树小白逛公园动态维护最大子段和,没啥好说的文文的摄影布置考虑清楚标记分讨合并算术天才⑨与等差数列维护区间最大最小,如果是等差数列,有了端点就可以知道整个序列了,再维护哈希值对比就可以了,突然发现我之前这个解法是乱搞,只有充分性没有必要性,只是题目没有卡正解:维护......
  • 数据结构小记
    线段树区间查询线段树可以维护具有结合律的信息。区间修改区间查询加上修改后应当满足的前提是我们可以维护一个封闭的集合\(\mathcal{S}\),使得任一操作\(o\in\mathcal{S}\),且\(\mathcal{S}\)对于复合封闭,即对任意\(u,v\in\mathcal{S}\),有\(u\circv\in\mathcal{S}\)......
  • 二. 基础数据结构
    二.基础数据结构0.引JSON是一个有着特殊结构的数据,为了解析JSON,需要使用编程语言将JSON的数据格式进行抽象,有助于更好地,快捷地实现JSON数据的解析.为了使解析JSON结构的性能更好,选用C语言实现JSON的数据结构的抽象,以及底层的结构的解析功能实现.1.JSON基础数......
  • 数据结构练习笔记——创建有序单链表
    创建有序单链表【问题描述】为从键盘终端输入的m个整数创建带头结点的有序单链表存储结构,使输入的数据元素在单链表中按照元素值递增有序。【输入形式】第一行:单链表中元素个数m第二行:单链表中的m个整数【输出形式】按递增有序形式输出m个整数【样例输入】513245【......
  • C语言:数据结构之单链表(四)
    本篇谈一谈单链表的改,具体操作就是找到他,然后修改元素即可,上一篇有相关代码,可以参考。改函数代码如下:voidCorrect(LinkListheader,intsite_,charletter_){LinkListq=Search_Site(header,site_);q->letter=letter_;}main函数如下:(修改第6,......
  • 数据结构之顺序表
    顺序表顺序表的定义     线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列   顺序表---用顺序存储的方式实现线性表。顺序存储---把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。   如何知道一个......
  • 数据结构 查找 红黑树查找
    1.红黑树的定义红黑树可以看作是对平衡二叉树的进一步改进。平衡二叉树的一个缺点在于插入和删除操作中为了维持平衡会消耗很大的执行代价,降低效率。红黑树的结构是在平衡二叉树的平衡标准上稍微放宽得到的。红黑树的定义:......