常用数据结构总结(基于C++)

目录

栈(stack)

简介

声明

基本操作

代码示例

队列(queue)

简介

声明

基本操作

代码示例

优先队列(priority_queue)

         简介

声明

基本操作

         调整输出次序

二叉搜索树

简介

基本概念

C++的STL中基于二叉搜索树有数据结构set和map

1.set

常用操作

2.map 

声明

常用操作

代码示例


栈(stack)

简介

栈是一种只能在一端进行插入或者删除操作的线性表。其中允许进行插入或者删除操作的一端称为栈顶。栈的插入和删除一般叫入栈和出栈。栈的顺序存储结构叫做顺序栈,栈的链式存储结构叫做链栈

C++中栈的头文件为

声明

stack<数据类型> 对象;

例如:stack s;

基本操作

  1. push(): 向栈内压入一个成员;
  2. pop(): 从栈顶弹出一个成员(在栈中将其删除),此函数不返回任何值;
  3. top(): 返回栈顶,但不删除成员;
  4. empty(): 如果栈为空返回true,否则返回false;
  5. size(): 返回栈内元素的大小;

注:栈只能对栈顶元素进行操作。

代码示例

#include
#include
using namespace std;

int main(){
//	创建一个栈 
	stack s;
	
	cout<<"栈的长度为:"<

运行结果:

 常用数据结构总结(基于C++)_第1张图片

队列(queue)

简介

队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表。允许进行插入的一端称为队尾,运行删除的一端称为队头。队列的顺序实现称为顺序队列,链接实现称为链接队列

C++中队列的头文件为

声明

queue<数据类型> 对象;

例如:queue q;

基本操作

  1. push(): 向队尾压入一个成员;
  2. pop(): 将队头元素弹出,此函数不返回任何值;
  3. front(): 返回对头元素,但不删除成员;
  4. back() 返回队尾元素,但不删除成员;
  5. empty(): 如果队列为空返回true,否则返回false;
  6. size(): 返回队列长度;

注:队列只能移除队首元素,但可返回队首元素或者队尾元素

代码示例

#include
#include
using namespace std;

int main(){
//	定义一个队列 
	queue q;
	char str[20] = "hello";
	
	cout<<"队列的长度为"<

 运行结果

常用数据结构总结(基于C++)_第2张图片

优先队列(priority_queue)

简介

所谓优先队列,就是当把数据存入队列时,会自动进行排序,然后取出数值时,会得到最大值(默认,也可通过设置参数来使每次输出最小值).这里的优先队列基于堆结构.

C++中队列的头文件同为

声明

priority_queue<数据类型> 对象;

例如:priority_queue q;

基本操作

  1. push(): 向队列插入元素;
  2. pop(): 移除堆顶元素,此函数不返回任何值;
  3. top(): 返回对头元素,但不删除成员;
  4. empty(): 如果队列为空返回true,否则返回false;
  5. size(): 返回队列长度;

调整输出次序

priority_queue ,less > p;     // 数组从大到小排序,默认从大到小排序
 
priority_queue ,greater > q;  // 从小到大排序

二叉搜索树

简介

搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用作字典或优先级队列。二叉搜索树是最简单的搜索树。其左子树的键值<=根节点的键值,右子树的键值>=根节点的键值。

一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。具有n个节点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉树,至少有2^(k-1)个叶子节点,至多有2^k-1个节点。

基本概念

  1. 父节点与子节点(parent and child):由一个结点可以引出的一个或两个结点,该结点称为其所引出节点的父节点,被引出的节点称为父节点的子节点
  2. 根(root):唯一没有父节点的节点
  3. 叶节点(leaf):没有子节点的节点
  4. 内部节点(internal node):除叶节点以外的节点
  5. 度(degree):节点的子节点数
  6. 深度(depth):从该节点到某一节点的路劲长度称为该节点的深度
  7. 高(height):某一节点到叶节点的最长路径长度称为该节点的高
  8. 树高:根节点的高度

C++的STL中基于二叉搜索树有数据结构set和map

1.set

set是根据元素值进行排序的集合,所以插入的元素在集合中具有唯一性。

常用操作

begin() 返回指向第一个元素的迭代器
end() 返回指向最后一个元素的迭代器
clear() 清除所有元素
insert() 在集合中插入元素
erase() 删除集合中的元素
find() 返回一个指向被查找到元素的迭代器,如果没找到则返回end()
empty() 如果集合为空,返回true
max_size() 返回集合能容纳的元素的最大限值
size() 集合中元素的数目
lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound() 返回大于某个值元素的迭代器

代码示例

#include
#include
using namespace std;

void print(set s){
//	输出集合中元素的数目 
	cout<<"size:"<::iterator it = s.begin();it!=s.end();it++){
		cout<<" "<<(*it);
	}
	cout< s;
	
//	插入值 
	s.insert(8);
	s.insert(3);
//	注意,重复插入的值会被忽视 
	s.insert(3);
	s.insert(7);
	s.insert(1);
//	输出当前set
	print(s);
	
//	删除指定值 
	s.erase(7); 
	print(s);
	
//	查找元素 
	if(s.find(1) == s.begin())
		cout<<"\nfind it"<

 运行结果

常用数据结构总结(基于C++)_第3张图片

2.map 

map以键值对为元素,集合以键作为排序标准。集合中的键具有唯一性。

声明

map mapStudent;

常用操作

clear() 清除 map 中所有元素;
erase() 删除 map 中指定位置的元素;
insert() 在 map 指定位置添加 pair 类型的元素;
find() 获取 map 中元素的迭代器
begin(), end() map 的正向迭代器的起始位置与终点位置;

代码示例

#include
#include
#include
using namespace std;

void print(map T){
//	声明map的一个迭代器 
	map::iterator it;
//	输出map的size 
	cout< item = *it;
		cout<"< T;
	
//	加入键值对 
	T["red"] = 32;
	T["blue"] = 688;
	T["yellow"] = 122;
//	对特定键对应的值进行操作 
	T["blue"] += 312;
	print(T);
	
//	通过pair的方法加入键值对 
	T.insert(make_pair("zebra",101010));
	T.insert(make_pair("white",0));
	print(T);
	
//	删除键值对 
	T.erase("yellow");
	print(T);
	
//	输出指定的键值对 
	pair target = *T.find("red");
	cout<"<

运行结果

常用数据结构总结(基于C++)_第4张图片

你可能感兴趣的:(基础概念,编程基础,数据结构)