c++ 链表快速查找

真正的链表快速查找 

需掌握STL,链表,字节对齐,指针与数组;自动增长数组,进阶。

vector用的就是数组链表,list用的就是离散链表。

所谓数组链表就是数组内存放链表地址,vector可以变长是类似数组拷贝的原理,比如上来开辟100个长度,满了在来100;实际上是来了一个200的数组,把原来的100拷贝到了200里,定位快。那么list存链表可以直接插入或追加方便,但是查找依然是遍历耗时。

实现原理就是new内存地址保存struct。任何需求都是定制性开发,根据需求和环境进行逻辑设计。

1mb的内存放8个字节的指针可以放131072个,这么多随便放吧,索引定位很快的。

#include 


//普通链表
typedef struct LinkedBuffer
{
	int i;
	char* buffer;
	LinkedBuffer* linked;
}Linkedb;

//数组链表
typedef struct LinkedArray
{
	double d;
	int i;
	char* buffer;
}Linkeda;

int main()
{
	/*----------------------------------数组链表--------------------------------------*/
	Linkeda *linked[1024];//长度1024
	int ptr_size = sizeof(*linked);
	int ary_size = sizeof(linked);
	printf("%d\n", ptr_size);
	printf("%d\n", ary_size);

	//自己指定,快速定位。扩容相对费时,不可插入可覆盖或特殊逻辑插入。
	linked[5] = new Linkeda;
	linked[5]->i = 5;
	printf("linked[5]:%d\n", linked[5]->i);
	//扩容参照c++ 自动增长数组
	/*----------------------------------单向链表--------------------------------------*/
	Linkedb *linkedb = new Linkedb;
	Linkedb *linkedb1 = new Linkedb;
	Linkedb *linkedb2 = new Linkedb;
	Linkedb *linkedb3 = new Linkedb;

	linkedb->i = 0;
	linkedb->buffer = NULL;
	linkedb->linked = linkedb1;
	
	linkedb1->i = 1;
	linkedb1->buffer = new char[1024];//长度1024,你懂的(Linkedb)设计随心。
	linkedb1->linked = linkedb2;
	
	linkedb2->i = 2;
	linkedb2->buffer = new char[1024];//长度1024,你懂的(Linkedb)设计随心。
	linkedb2->linked = linkedb3;
	
	linkedb3->i = 3;
	linkedb3->buffer = new char[1024];//长度1024,你懂的(Linkedb)设计随心。
	linkedb3->linked = linkedb;//这里赋值NULL链表结束。赋值linkedb形成循环
	/*----------------------------------可以单独创建插入删除-------------------------*/
	Linkedb lin = *linkedb;
	for (size_t i = 0; i<8; i++)
	{
		printf("%d\n",lin.i);
		if (lin.linked!=NULL)
		{
			lin = *lin.linked;
		}
		else
		{
			break;
		}
	}

	/*当然可以扩展树结构、图结构*/
}

c++ 链表快速查找_第1张图片

你可能感兴趣的:(算法,快速查找链表,快速定位链表)