c++ 链表快速查找

真正的链表快速查找 

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

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

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

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

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

#include <stdio.h>


//普通链表
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;
		}
	}

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug狂人

让我们和小姐姐唠嗑可以肢愣起来

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值