C++ 在c+中实现通用的双链表+;
我已经实现了一个相当简单的双向链表的概念。我不知道我做错了什么! 我已尝试将节点的成员变量设置为公共变量,但没有帮助。朋友课也没用。这里的非类类型是什么 d_list.hC++ 在c+中实现通用的双链表+;,c++,list,data-structures,C++,List,Data Structures,我已经实现了一个相当简单的双向链表的概念。我不知道我做错了什么! 我已尝试将节点的成员变量设置为公共变量,但没有帮助。朋友课也没用。这里的非类类型是什么 d_list.h #包括“node.h” #ifndef节点 #定义节点 模板 d类清单{ 私人: int列表大小; T*头; T*尾; 公众: //参数化默认构造函数 d_列表(T*h=nullptr,T*T=nullptr):头(h),尾(T){ //领头 T*gethead(){返回此->头;} T*gettail(){返回此->尾;}
#包括“node.h”
#ifndef节点
#定义节点
模板
d类清单{
私人:
int列表大小;
T*头;
T*尾;
公众:
//参数化默认构造函数
d_列表(T*h=nullptr,T*T=nullptr):头(h),尾(T){
//领头
T*gethead(){返回此->头;}
T*gettail(){返回此->尾;}
void addnodeEastail(T*新节点){
如果(此->头==nullptr){
this->head=new\u节点;//this->head将指向new\u节点
这个->尾巴=这个->头;
此->列表大小=列表大小+1;
}
否则{
此->尾=新的_节点;
此->尾->下一个=新节点->上一个;
}
}
};
#恩迪夫
'''
node.h
模板
类节点{
私人:
节点*下一步;
节点*先前;
T数据;
公众:
Node()=默认值;
节点(dta):数据(dta){
~Node(){}
};
main.cpp
#包括
#包括“d_list.h”
使用名称空间std;
int main(){
d_名单d1;
不能
这毫无意义,您的头和尾指针应该是指向列表中第一个和最后一个节点的指针:
Node<T>* head;
Node<T>* tail;
节点*head;
节点*尾部;
在向列表中添加元素时,您需要创建新的节点
实例来保存数据,并将节点添加到列表中。问题是头
和尾
不应该是t
,而应该是节点
:
它们之间没有链接,这只是指向int
的指针(如果使用类似new
的内容,则为int
的列表)。若要创建链接,您需要使用节点
,这样无论它们存储在内存中的什么位置,它们都将具有逻辑连接。这样,d_list
就会变成这样:
Node<int>* head;
Node<int>* tail;
节点*head;
节点*尾部;
这将允许您使用节点开发一个逻辑连接的int
s列表,这正是链接列表所需要的。为什么您的main
程序试图向du列表添加指针
?它不应该使用int
值简单地调用add
函数,并且链接列表类需要注意细节?几乎所有的指针都指向“代码>节点< /代码>,而不是<代码> t>代码>。如果我问,为什么你试图在C++中实现双链表?我希望类似的东西:<代码> dyListD1;D1. Advices(10);D1. Addit(20);D1. Adv.Addit(30)。
并期望看到d_list
在列表中有3项。main
不应该玩弄指针、节点等。@PaulMcKenzie收到了!将尝试实现相同的功能。谢谢!
#include<iostream>
#include"d_list.h"
using namespace std;
int main(){
d_list<int> d1;
cout<<d1.gethead()<<endl;
cout<<d1.gettail()<<endl;
int var=20;
int* n1= &var;
int var2 =40;
int* n2= &var2;
d1.addnodeastail(n1);
d1.addnodeastail(n2);
cout<<d1.gethead()<<endl;
cout<<d1.gettail()<<endl;
return 0;
}
In file included from main.cpp:2:
d_list.h: In instantiation of 'void d_list<T>::addnodeastail(T*) [with T = int]':
main.cpp:14:24: required from here
d_list.h:28:29: error: request for member 'next' in '*((d_list<int>*)this)->d_list<int>::tail', which is of non-class type 'int'
28 | this->tail->next=new_node->previous;
| ~~~~~~~~~~~~^~~~
d_list.h:28:44: error: request for member 'previous' in '* new_node', which is of non-class type 'int'
28 | this->tail->next=new_node->previous;
| ~~~~~~~~~~^~~~~~~~
template<class T>
class d_list{
private:
int list_size;
T* head;
T* tail;
int* head;
int* tail;
Node<T>* head;
Node<T>* tail;
Node<T>* head;
Node<T>* tail;
int* head;
int* tail;
Node<int>* head;
Node<int>* tail;