C++ 数据结构 技术教程文章

数据结构 - 顺序栈的实现 C++

顺序栈封装 C++使用C++对顺序栈进行了简单的封装,实现了栈的基本操作 封装方法: pop(),top(),size(),empty(),push()代码已经过测试 #pragma once #include <iostream> #include <algorithm> using namespace std; template<class T> class Stack { public:Stack(); //构造函数void pop(); //弹出头元素void push(T value); //入栈bool empty(); //判断是否为空栈int size(); //返回栈的大小T top(); ...

数据结构C++实现-第一章 绪论

1.1 计算机与算法 1.1.3 起泡排序 void bubbleSort(int a[], int n) {for(bool sorted=false; !sorted; --n) {sorted = true; // 每趟循环前都假定已经排序for(int i=1; i<n; ++i)if(a[i-1] > a[i]) { // 一旦相邻元素是逆序swap(a[i-1],a[i]);sorted = false; // 发现局部逆序,显然不是排序好的}} } 1.3 复杂度分析 复杂度排名 1.3.1 常数O(1) 1.3.2 对数O( log(n) ) 每执行一轮,n的大小都会成倍减小。对于对数的多次,即c循环里...

[数据结构 - 第3章补充] 线性表之单链表(C++实现)【图】

一、类定义 单链表类的定义如下: #ifndef SIGNALLIST_H #define SIGNALLIST_Htypedef int ElemType; /* "ElemType类型根据实际情况而定, 这里假设为int *//* 线性表的单链表存储结构 */ typedef struct node {ElemType data; // 数据域struct node *next; // 指针域 }Node, LinkList;class SignalList { public:SignalList(int size = 0); // 构造函数~SignalList(); // 析构函数void clearList(); // 清空顺序表操作bool isEmp...

C++数据结构之栈(十三)【代码】【图】

栈是一种后进先出(Last in / First out, LIFO)的数据结构。栈的主要操作有以下几种:push 向栈顶插入元素 top 获取栈顶元素的值 pop 取出栈顶元素 isEmpty 判断栈是否为空 clear 清空栈参考博客:https://www.cnblogs.com/msymm/p/9751326.html C++ 数组实现的栈 测试.h #ifndef ARRAY_STACK_HXX #define ARRAY_STACK_HXX#include <iostream> #include "ArrayStack.h" using namespace std;template<class T> class ArrayStack{p...

《C++笔记 第二部分 数据结构及STL容器篇》第4章 队列C++模板实现及STL容器【代码】【图】

4.1队列简介 4.1.1 队列的特点 队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点: 队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。 在队尾添加元素,在队头添加元素。 4.1.2 队列的相关概念 队头与队尾: 允许元素插入的一端称为队尾,允许元素删除的一端称为队头。 入队:队列的插入操作。 出队:队列的删除操作。 例如我们有一个存储整型元素的队列,我们依次入队:{1,2,3}图1 添加...

《数据结构》(C++)之第六章:图

6.1 图的逻辑结构 6.1.1 图的定义和基本术语 1、图的定义图:是由定点的有穷非空集合和顶点之间边的集合组成,通常表示为G=(V, E)G:表示一个图 V:图G中顶点的集合 E:图G中边的集合无向图与有向图:如果图的任意两个顶点之间的边都是无向边,则称该图为无向图,否则称该图为有向图若顶点vi和vj之间的边没有方向,则称这条边为无向边,用无序偶对(vi, vj)来表示若从顶点vi到vj的边有方向,则称这条边为有向边(也称为弧),用有序...

《数据结构》(C++)之第八章:排序技术【代码】

8.1 概述 8.1.1 排序的基本概念记录:在排序问题中,通常将数据元素称为记录(record)排序:将一个记录的任意序列重新排列成一个 按关键码有序 的序列正序、逆序:正序 待排序序列中的记录已按关键码排好序逆序/反序 待排序序列中记录的排列顺序与排好序的顺序正好相反趟:在排序过程中,将待排序的记录序列扫描一遍称为一趟(pass)排序算法的稳定性:假定在待排序的记录序列中,存在多个具有 相同关键码 的记录稳定性 判定 例子...

c++数据结构【图】

c++数据结构 我们使用c++做一些系统的时候,总会有一些数据要进行存储,这个时候我们就需要用到c++的数据结构,也就是c语言中的结构体。为了定义结构,我们必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:struct name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;name是这个结构体的名字,member_type1 是声...

c++容器的底层数据结构【代码】

序列式容器 vector -》底层数据结构为数组,支持快速随机访问 list -》底层数据结构为双向链表,支持快速增删 deque -》底层数据结构为一个中央控制器和多个缓冲区 stack、queue -》(适配器:对容器的封装)底层数据结构为vector或list(vector容量大小有限制不使用) priority_queue -》底层数据结构为vector,以堆的处理规则来管理 关联式容器 底层数据结构为红黑树,有序的 set -》不可重复 map -》不可重复 multiset -》可重复 ...

C++应用程序性能优化(四)——C++常用数据结构性能分析【代码】【图】

C++应用程序性能优化(四)——C++常用数据结构性能分析 本文将根据各种实用操作(遍历、插入、删除、排序、查找)并结合实例对常用数据结构进行性能分析。 一、常用数据结构简介 1、数组 数组是最常用的一种线性表,对于静态的或者预先能确定大小的数据集合,采用数组进行存储是最佳选择。数组的优点一是查找方便,利用下标即可立即定位到所需的数据节点;二是添加或删除元素时不会产生内存碎片;三是不需要考虑数据节点指针的存储...

运用c++语言打出数据结构中的静态链表代码,仅供参考【代码】

这个也算是较为简单的一种数据结构思想了,是古人们没有指针时候用的,虽然很古老,但是很实用,不如哈夫曼树的时候用这个就明显比指针好用的多,不废话,直接上代码。 里面有很多注释的内容是我用来测试代码的,不用管,但也可以将其放出来更好的理解代码。 #include using namespace std; #define MAXSIZE 1000 #define OK 1 #define Status int #define Elemtype char #define ERROR -1 static int length=0; typedef struct { ...

信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1354:括弧匹配检验【代码】

时间限制: 1000 ms 内存限制: 65536 KB 提交数: 5098 通过数: 1642 【题目描述】 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。 现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配? 输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,...

个人总结学习网站计算机学科(c/c++、数据结构等)------持续更新

个人总结学习网站计算机学科(c/c++、数据结构等)------持续更新 个人在学习过程中发现的学习网站,包括计算机方面的课程(c/c++、数据结构等)、项目实战等,分别做了评价,仅供参考,希望对你们有帮助。 网站总结 1.实验楼 (课程+实战) ???? https://www.shiyanlou.com/courses/ 2.PTA (程序设计类实验辅助平台)??? https://pintia.cn/ 3.中国大学MOOC(视频课程,包含计算机、考研、四六级等)?? https://www.icourse1...

c++数据结构图论创建一个导航图,实现基本功能

#include <iostream>#include<fstream>#include<stack>#include<iomanip>#define mvnum 50#define maxint 32767 typedef int status;using namespace std;typedef struct{ int point; string number; string placename; string introduction; }vex;typedef struct{ int realweight; int virtualize; }arc;typedef struct{ vex vexs[mvnum]; //0下标不用 arc arcs[mvnum][mvnum]; int vexnum,arcnum; string title[4];}Amgraph;sta...

数据结构C/C++代码实现 栈链表基本操作

实现栈链表基本操作: #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct linknode { ElemType data; struct linknode *next; }LiStack; /****************初始化链栈********************/ void InitStack(LiStack* &s) { s=(LiStack*)malloc(sizeof(LiStack)); s->next=NULL; } /****************销毁链栈********************/ void DestroyStack(LiStack* &s) { LiStack *p=s->...

数据结构笔记2(c++)_跨函数使用内存的问题【代码】【图】

预备知识 1.所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址 //1.cpp 所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址 # include <stdio.h>int main(void) {double * p;double x = 66.6;p = &x; //x占8个字节 1个字节是8位, 1个字节一个地址, p中只存放一个地址,通常是第一个字节的地址// 一个变量占好多好多字节,但是我们通常用一个字节的地址来表示整体的地址,即首地址来表示它doubl...

C++第三十九篇 -- 研究一下Windows驱动开发(二)-- 驱动程序中重要的数据结构【图】

数据结构是计算机程序的核心,I/O管理器定义了一些数据结构,这些数据结构是编写驱动程序时所必须掌握的。驱动程序经常要创建和维护这些数据结构的实例。 一、驱动对象(DRIVER_OBJECT) 每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核中的对象管理程序所创建的。 驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核加载,并且内核对一个驱动只加载一个实例。确切地说,是由...

关于c/c++中的volatile、内存屏障以及无锁数据结构

一:先说 volatile,静态乱序 C/C++ 语言中的volatile关键字作用? 1.易变性:volatile告诉编译器,某个变量是易变的,当编译器遇到这个变量的时候,只能从变量的内存地址中读取这个变量,不可以从缓存、寄存器、或者其它任何地方读取。 2.顺序性:两个包含volatile变量的指令,编译后不可以乱序。注意是编译后不乱序,但是在执行的过程中还是可能会乱序的,这点需要由其它机制来保证,例如memory- barriers。 ...