算法基础学习(一)--基础复习

来源:互联网 发布:银泰百货庆春店 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;    }}



原创粉丝点击