算法基础学习(一)--基础复习
来源:互联网 发布:银泰百货庆春店 mac 编辑:程序博客网 时间:2024/04/29 14:50
1.数组
最简单的数据存储结构,连续内存,需要预先分配空间
先来了解一下时间效率:
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。
时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再关注一个算法的空间复杂度。
一个字节的长度是8位,即八个二进制位,两个字节为一个汉字。字节的含义:字节是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
获取数组的长度:
length = sizeof(array)/sizeof(*array);//表达式1 //length = sizeof(array)/sizeof(array[0]);//表达式2 //length = sizeof(array)/sizeof(int);//表达式3
数组可以根据下标查找元素,时间效率很高
1.动态数组的创建[cpp] view plain copy在CODE上查看代码片派生到我的代码片 //动态数组的创建 int cloum, row; //申请空间 int **a = new int*[cloum]; for (int i = 0; i < cloum; i++) { a[i]=new int* [row]; }
另一种方法:
#include<vector.h>vector<int> v;//新建动态数组上例利用C++中的stl的vector容器创建数组(新一次的容量都是前一次的两倍)vector是将元素置于一个动态数组中进行管理的容器vector可以随机存取元素,支持索引值直接存取,用[]或者at()方法vector下尾部添加或者删除元素非常快,但在中间或头部插入或者删除元素比较耗时数组名的含义:
可以理解成数组首地址,在数组遍历如a[i]时都是先找到数组首地址再向后查找得到的。
2.字符串
C/C++中每个字符串均已'\0'结束,每个字符串均有一个额外的长度开销;
1.字符指针可以指向一个字符串。
我们可以用字符串常量对字符指针进行初始化。例如,有说明语句:
char *str = "This is a string.";
是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。
这里要注意字符指针与字符数组之间的区别。例如,有说明语句:
char string[ ]="This is a string.";
此时,string是字符数组,它存放了一个字符串。
字符指针str与字符数组string的区别是:str是一个变量,可以改变str使它指向不同的字符串,但不能改变str所指的字符串常量。不必为str分配内存以及存储字符串内容;
string是一个数组,可以改变数组中保存的内容,在创建时就分配17个字节的空间,初始地址也会分配;
3.链表的操作
每个节点可以分为两部分,数据域和地址域,数据域用来存储相关数据,地址域用来存储下一个节点的地址
如下图:
节点1 地址为 0x90, 存储数据1;
节点2 地址为 0x20,存储数据2;
节点3 地址为 0x40,存储数据3;
节点4 地址为 0x70,存储数据4;
链表的插入、删除
a:链表的插入代码实现:
s->next=p->next;//把p的后继节点设置为s的后继节点p->next=s;//把s设为p的后继节点b:链表的删除代码实现:
p=p->next;p->next=s->next;创建链表
每创建一个结点,都使该结点成为头结点,这样头结点不断地向前移动,就可以创建一个没有特定头结点的链表。
首先创建的结点,会出现在整个链表的最末端,所以数据的写入是逆序的。
【开始的时候,head要初始化为NULL】
LinkList LinkListCreate(const int n){ int i; LinkList head; Node *p; head = NULL; for(;i<n;i++) { p = (Node*)malloc(sizeof(Node)); if(NULL == p) perror("ERROR"); scanf("%d",&p->data); p->next = head; head = p; }}
- 算法基础学习(一)--基础复习
- 算法学习一(基础)
- OC 基础复习(一)
- JSP复习(一) 基础
- Java基础复习(一)
- Javascript基础复习(一)
- 算法学习笔记(一)-算法基础
- JAVA学习笔记(复习)-----2、 JAVA基础(一)
- 基础排序算法复习
- 算法基础复习-QuickSort
- 算法基础复习-MergeSort
- 算法基础复习-HeapSort
- 算法基础复习-BubbleSort
- 算法基础复习-InsertionSort
- 算法基础复习-SelectionSort
- 算法基础复习-ShellSort
- 算法基础复习-BucketSort
- 算法基础复习-RadixSort
- struts的<!DOCTYPE>配置说明
- 扩展欧几里得定理
- 数据结构导论——自考
- Android开发调试神器Stetho使用
- 2017多校合练1
- 算法基础学习(一)--基础复习
- 视频编码会议常用网址
- Unity3D配置安卓环境报仇处理
- java swing制作密钥生成器-AES对称加密
- VS简易示波器(三):子属性窗的参数传递
- ios OC初学
- hpuoj【1044】人民币问题
- 《C++多继承之菱形继承》
- 两倍屏和三倍屏中的1px处理方法