数据结构
晶凌玄夜
这个作者很懒,什么都没留下…
展开
-
vector的模拟实现
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小。为了增加存储空间,其做法是,分配一个新的数组,然后将全...原创 2020-04-19 10:56:39 · 194 阅读 · 0 评论 -
C++实现链表(模板)
#pragma once#include<cassert>#include<iostream>using namespace std;template<class T>//定义节点class Node{public: T data; Node* next;};//定义链表template<class T>class ...原创 2020-02-27 22:12:48 · 306 阅读 · 0 评论 -
选择排序(模板)
基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。直接选择排序的特性总结:直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定#include <vector>//升序(小于)template<class T>b...原创 2020-02-11 22:17:24 · 448 阅读 · 0 评论 -
插入排序(模板)
直接插入排序:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。、下图是一个升序的排序过程直接插入排序的特性总结:元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定#include...原创 2020-02-10 00:39:06 · 491 阅读 · 0 评论 -
冒泡排序(模板)
基本思想:交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。特点:①升序:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。②降序:将键值较大的记录向序列的头部移动,键值较小的记录向序列的后部移动冒泡排序的特性总结:冒泡排序是一种非常容易理解的排序时间复杂度:O(N^2)空间复杂度:O(1)稳定性:稳定#include <vect...原创 2020-02-07 22:49:25 · 910 阅读 · 0 评论 -
二叉树创建及部分操作
声明:为了封装性,下面所有的递归函数都设为私有,用一个公有方法调用。#include<iostream>#include<stack>#include <queue>using namespace std;//定义节点template<class T>class tree_node{public: T data; tree_n...原创 2019-12-28 17:39:31 · 120 阅读 · 0 评论 -
C++实现顺序表(模板类)
C++实现动态(可扩容)顺序表.h—头文件#pragma once#include<iostream>#include<cassert>using namespace std;template<class T>class Seqlist{private: T* _array; size_t _capacity;//容量 size_t ...原创 2019-10-13 14:36:10 · 1325 阅读 · 0 评论 -
动态栈的实现
栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。#include<stdio.h>#include<ass...原创 2019-05-01 01:17:52 · 219 阅读 · 0 评论 -
链队列的基本操作
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低基本结构如图代码:#include<stdio.h>#include<malloc.h>#include<assert.h>typedef int QDataType;// 链式结构:表示队列 typedef struct ...原创 2019-05-04 01:43:05 · 926 阅读 · 0 评论 -
单链表的创建与部分功能的实现
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:单向、双向带头、不带头循环、非循环下面是带头单向非循环链表的代码://头结点初始化void init(Node* link){ assert(link != NULL); link->head = N...原创 2019-04-18 20:51:45 · 157 阅读 · 0 评论 -
动态通讯录(用顺序表实现)
利用顺序表实现动态通讯录,实质就是一个动态顺序表,基本代码和顺序表大致相同,涉及到结构体的创建,初始化,插入,删除,查找等功能。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>//定...原创 2019-04-13 21:59:42 · 1683 阅读 · 0 评论 -
顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。问题:中间/头部的插入删除,时间复杂度为O(N)增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满...原创 2019-03-26 18:47:32 · 879 阅读 · 0 评论