基础数据结构与算法(C++描述)

本文详细介绍了C++中的基础数据结构,如数组、多维数组和链表,包括它们的声明、初始化和操作方法。同时,文章还探讨了算法,如搜索和排序,并提到了二分搜索、BFS和DFS等。此外,还讨论了函数参数中的数组使用以及字符串在编程中的应用。
摘要由CSDN通过智能技术生成

基础数据结构与算法(C++描述)

数据结构

数组

基本概念

数组可以存储一个固定大小的相同类型元素的顺序集合。

声明数组

指定元素的类型和元素的数量,arraySize必须是一个大于零的整数常量,type可以是任意有效的 C++ 数据类型。

type arrayName [ arraySize ];
初始化数组

使用一个初始化语句。

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

省略掉了数组的大小,数组的大小则为初始化时元素的个数,使用sizeof求数组大小。

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
int num_elements = sizeof(balance) / sizeof(balance[0]);

所有数组元素初始化为0

int array[5] = {0};
访问数组
  • 使用下标索引

  • 使用指针

    double runoobAarray[50];
    double *p = runoobAarray;   /* runoobAarray是指向数组第一个元素的指针 */
    p = &runoobAarray[0];
    p = p + 1;                  /* p指向runoobAarray[1] */
    *p = 1;                     /* runoobAarray[1] = 1 */
    *(runoobAarray + 2) = 1;    /* runoobAarray[2] = 1 */
    
多维数组

声明一个 x 行 y 列的二维整型数组

type arrayName [ x ][ y ];

初始化二维数组

int a[3][4] = {  
 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
 {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
};
int b[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
函数参数

函数参数而言,数组的长度是无关紧要的,因为 C++ 不会对形式参数执行边界检查。

void myFunction_1(int *param);
void myFunction_2(int param[10]);
void myFunction_3(int param[]);

字符串

链表

单向链表

struct ListNode {
	int val;
	ListNode *next;
    ListNode() : val(0), next(NULL) {}
	ListNode(int x) : val(x), next(NULL) {}
    ListNode(int x, ListNode *p) : val(x), next(p) {}
};

双向链表

struct ListNode {
	int val;
    ListNode *pre;
	ListNode *next;
    ListNode() : val(0), pre(nullptr), next(nullptr) {}
	ListNode(int x) : val(x), pre(nullptr), next(nullptr) {}
    ListNode(int x, ListNode *p) : val(x), pre(p) {}
};

链表操作

  • 插入:首插法、尾插法
  • 删除
  • 指针遍历

队列

算法

搜索

二分搜索
BFS
DFS

排序

排序复杂度

排序时间复杂度

分类
  • 稳定:冒泡、插入、归并
  • 非稳定:快排,选择,希尔,堆

位运算

哈希

时间复杂度

socket

socket

socket

socket

参考资料

阿秀的求职笔记

《数据结构 C++语言版》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值