数据结构复习整理(易混点、易忘点)

来源:互联网 发布:linux查看本地arp缓存 编辑:程序博客网 时间:2024/06/14 05:35

一、时间复杂度计算


二、关于链表

1、头指针与头结点区别:

头指针:头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针。

                注:无论链表是否为空,头指针均不为空。头指针是链表的必要元素。

头结点:头结点是为了操作的统一和方便而设立的。放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)。

                注:有了头结点,对在第一元素结点的插入结点和删除第一结点,其操作与其他结点的操作就统一了。

                        头结点不一定是链表必须要素。

struct node first;

first.next = &one;                   //first为头结点

struct node *head = &first;               //头指针


2、内存管理   new/delete       malloc/free     括号必须配对

区别:①new/delete是C++里才有的,而new/delete与malloc/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在所有的new操作过程中,总是分为两步的:一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需先调用析构函数,然后再销毁堆内存。

            ②new/delete通常来说是操作符,可以重载,重载之后就成了函数,而malloc/free是库函数。

            ③malloc得到的指针是void *型的,必须要强转才能成为需要的类型。

            ④C++默认的new/delete操作符内部,其实也调用了malloc/free这两个函数。

            ⑤如果用free释放"new创建的动态对象",那么该对象因无法执行析构函数而可能导致程序出错。

共同:都可以释放NULL指针。


3、关于数据结构中用到的C++中的知识点:

①引用:为目标变量取别名,不另外分配空间;

②输入输出:cin、cout、及头文件;

③命名空间:using namespace std;


4、关于malloc地址不够时,使用realloc重新分配内存(使用malloc和realloc都要  #include <stdlib.h>)

realloc是对malloc申请的内存进行大小的调整。申请的内存同样需要用free()来释放。

void *realloc(void *ptr, unsigned newsize);    //给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度。

realloc是从堆上分配内存的,当扩大一块内存空间时,realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果数据后面的字节不够,问题就出来了,那么就使用堆上第一个有足够大小的空闲块,现存的数据然后就被拷贝到新的位置,而老块则放回到堆上的空闲块中。如果重新分配成功则返回指向被分配内存的void类型指针,否则返回空指针NULL。

在顺序表的插入元素函数中,当存储空间已满,就要增加分配,这时:

newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(ElemType));



0 0
原创粉丝点击