面经 常见数据结构的算法 - 双向链表

本文介绍了一种双向链表的数据结构实现方法,包括创建链表、插入节点等基本操作,并提供了完整的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见数据结构的算法。总结一下现在遇到的常见的算法,也是给自己一个交待吧。

双向链表:

话不多说直接上代码。

头文件:

#ifndef _SHUANG_LINK_TABLE_
#define _SHUANG_LINK_TABLE_
#include "Head.h"


typedef struct ST_D_Link_Table
{
	int data;
	ST_D_Link_Table *_next_;
	ST_D_Link_Table *_front_;
};

class D_Link_Table
{
public:
	D_Link_Table();
	~D_Link_Table();
	void test();

	bool CreateDLinkTable();
	int D_Link_Table::GetLength();
	bool CacheInsert(int data);
	bool Insert(int pos, int data);
	bool Delete();

protected:
private:
	ST_D_Link_Table *head;
};

#endif

实现:

#include "shuanglianbiao.h"
D_Link_Table::D_Link_Table()
{

}
D_Link_Table::~D_Link_Table()
{

}

void D_Link_Table::test()
{
	CreateDLinkTable();
	CacheInsert(1);
	CacheInsert(2);
	CacheInsert(3);
	CacheInsert(4);
	CacheInsert(5);
}

bool D_Link_Table::CreateDLinkTable()
{
	head = (ST_D_Link_Table*)malloc(sizeof(ST_D_Link_Table));
	if (head == NULL)
	{
		return false;
	}
	memset(head, 0, sizeof(ST_D_Link_Table));
	return true;
}

int D_Link_Table::GetLength()
{
	ST_D_Link_Table* temp = head;
	int len = 0;
	while(temp != NULL)
	{
		temp = temp->_next_;
		++len;
	}
	return len;
}

bool D_Link_Table::CacheInsert(int data)
{
	int ret = false;
	int depth = GetLength();
	ret = Insert(depth - 1, data);
	return ret;
}

bool D_Link_Table::Insert(int pos, int data)
{
	if (pos < 0)
	{
		return false;
	}
	ST_D_Link_Table *temp = head;
	ST_D_Link_Table *node = (ST_D_Link_Table *)malloc(sizeof(ST_D_Link_Table));
	memset(node, 0, sizeof(ST_D_Link_Table));
	if (pos == 0)
	{
		//head
		temp->data = data;
		temp->_next_ = node;
		temp->_front_ = NULL;
	}
	else
	{
		//head-child
		//find point *next is NULL
		int i = 0;
		while ((temp != NULL) && (i < pos - 1))
		{
			temp = temp->_next_;
			++i;
		}
		if (temp == NULL)
		{
			//is tail 
			return false;
		}
		temp->_next_->data = data;
		temp->_next_->_next_ = node;
		temp->_next_->_front_ = temp;
		

	}
	return true;

}



bool D_Link_Table::Delete()
{
	return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值