Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链表中的打印函数未给出错误或输出。什么是错误的实现? #包括 使用std::cout; 使用std::endl; 模板 结构链接节点{ 类型数据; 链接的_节点*下一步; 链接的_节点*prev; }; 模板 班级名单{ 公众: 链接节点基准; 链接的_节点*头,*尾; list(){datum.next=datum.prev=head=tail=NULL;} 列出并推回(类型t); 键入pop_back(); 列表和推前(t型); 键入_t pop_front(); 作废打印(); }; 模板 作废列表::打印(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*ptr=头部; while(ptr){ std::cout数据下一步; } std::cout data=值; 如果(尾部){ 项目->上一个=尾部; 尾部->下一步=项目; } 尾=项目; 如果(!head)head=tail; 归还*这个; } 模板 类型列表::弹出返回(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*项; 类型t值; 如果(头!=尾和尾){ 值=尾部->数据; 项目=尾部; tail=tail->prev; tail->next=NULL; 删除项目; 返回值; } 值=头->数据; 删除标题; 删除尾部; 头=尾=空; 返回值; } 模板 列表和列表::向前推(类型值){ 链接的_节点*项=新链接的_节点; 如果(!item)抛出std::bad_alloc(); 项目->数据=价值; 若有(总目){ 项目->下一步=标题; head->prev=项目; } 头=项目; 如果(!tail)tail=头部; 归还*这个; } 模板 类型列表::pop\u front(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*项; 类型t值; 如果(头部!=尾部和头部){ 值=头->数据; 项目=总目; head->prev=NULL; 头部=头部->下一步; 删除项目; 返回值; } 值=尾部->数据; 删除尾部; 删除标题; 头=尾=空; 返回值; } int main(int argc,字符**argv){ 清单编号; 数字。向后推(5)。向后推(13)。向前推(22); number.print(); 返回0; }_C++_Linked List - Fatal编程技术网

C++ 链表中的打印函数未给出错误或输出。什么是错误的实现? #包括 使用std::cout; 使用std::endl; 模板 结构链接节点{ 类型数据; 链接的_节点*下一步; 链接的_节点*prev; }; 模板 班级名单{ 公众: 链接节点基准; 链接的_节点*头,*尾; list(){datum.next=datum.prev=head=tail=NULL;} 列出并推回(类型t); 键入pop_back(); 列表和推前(t型); 键入_t pop_front(); 作废打印(); }; 模板 作废列表::打印(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*ptr=头部; while(ptr){ std::cout数据下一步; } std::cout data=值; 如果(尾部){ 项目->上一个=尾部; 尾部->下一步=项目; } 尾=项目; 如果(!head)head=tail; 归还*这个; } 模板 类型列表::弹出返回(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*项; 类型t值; 如果(头!=尾和尾){ 值=尾部->数据; 项目=尾部; tail=tail->prev; tail->next=NULL; 删除项目; 返回值; } 值=头->数据; 删除标题; 删除尾部; 头=尾=空; 返回值; } 模板 列表和列表::向前推(类型值){ 链接的_节点*项=新链接的_节点; 如果(!item)抛出std::bad_alloc(); 项目->数据=价值; 若有(总目){ 项目->下一步=标题; head->prev=项目; } 头=项目; 如果(!tail)tail=头部; 归还*这个; } 模板 类型列表::pop\u front(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*项; 类型t值; 如果(头部!=尾部和头部){ 值=头->数据; 项目=总目; head->prev=NULL; 头部=头部->下一步; 删除项目; 返回值; } 值=尾部->数据; 删除尾部; 删除标题; 头=尾=空; 返回值; } int main(int argc,字符**argv){ 清单编号; 数字。向后推(5)。向后推(13)。向前推(22); number.print(); 返回0; }

C++ 链表中的打印函数未给出错误或输出。什么是错误的实现? #包括 使用std::cout; 使用std::endl; 模板 结构链接节点{ 类型数据; 链接的_节点*下一步; 链接的_节点*prev; }; 模板 班级名单{ 公众: 链接节点基准; 链接的_节点*头,*尾; list(){datum.next=datum.prev=head=tail=NULL;} 列出并推回(类型t); 键入pop_back(); 列表和推前(t型); 键入_t pop_front(); 作废打印(); }; 模板 作废列表::打印(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*ptr=头部; while(ptr){ std::cout数据下一步; } std::cout data=值; 如果(尾部){ 项目->上一个=尾部; 尾部->下一步=项目; } 尾=项目; 如果(!head)head=tail; 归还*这个; } 模板 类型列表::弹出返回(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*项; 类型t值; 如果(头!=尾和尾){ 值=尾部->数据; 项目=尾部; tail=tail->prev; tail->next=NULL; 删除项目; 返回值; } 值=头->数据; 删除标题; 删除尾部; 头=尾=空; 返回值; } 模板 列表和列表::向前推(类型值){ 链接的_节点*项=新链接的_节点; 如果(!item)抛出std::bad_alloc(); 项目->数据=价值; 若有(总目){ 项目->下一步=标题; head->prev=项目; } 头=项目; 如果(!tail)tail=头部; 归还*这个; } 模板 类型列表::pop\u front(){ 如果(!head)抛出std::超出范围(“空列表”); 链接的_节点*项; 类型t值; 如果(头部!=尾部和头部){ 值=头->数据; 项目=总目; head->prev=NULL; 头部=头部->下一步; 删除项目; 返回值; } 值=尾部->数据; 删除尾部; 删除标题; 头=尾=空; 返回值; } int main(int argc,字符**argv){ 清单编号; 数字。向后推(5)。向后推(13)。向前推(22); number.print(); 返回0; },c++,linked-list,C++,Linked List,在上面,我只是想从开始到结束打印所有元素,只是为了测试它是否工作 当我使用下面的代码时,它工作得非常好 #include <iostream> using std::cout; using std::endl; template <typename type_t> struct linked_node { type_t data; linked_node * next; linked_node * prev; }; template <

在上面,我只是想从开始到结束打印所有元素,只是为了测试它是否工作

当我使用下面的代码时,它工作得非常好

#include <iostream>
using std::cout;
using std::endl;

template <typename type_t>
struct linked_node {
    type_t data;
    linked_node * next;
    linked_node * prev;
};


template <typename type_t>
class list {
public:
    linked_node<type_t> datum;
    linked_node<type_t> * head, * tail;

    list() {datum.next = datum.prev = head = tail = NULL;}

    list<type_t> &push_back(type_t);
    type_t pop_back();

    list<type_t> &push_front(type_t);
    type_t pop_front();

    void print();
};

template <typename type_t>
void list<type_t>::print(){
    if(!head) throw std::out_of_range("Empty list");
    linked_node<type_t> * ptr = head;

    while(ptr){
        std:: cout << ptr->data << " ";
        ptr = ptr->next;
    }
        std::cout << std::endl;
}

template <typename type_t>
list<type_t> &list<type_t>::push_back(type_t value){
    linked_node<type_t> * item = new linked_node<type_t>;
    if(!item) throw std::bad_alloc();

    item->data = value;

    if(tail){
        item->prev = tail;
        tail->next = item;
    }

    tail = item;

    if(!head) head = tail;
    return *this;
}

template <typename type_t>
type_t list<type_t>::pop_back(){
    if(!head) throw std::out_of_range("empty list");

    linked_node<type_t> * item;
    type_t value;

    if(head != tail && tail){
        value = tail->data;
        item = tail;
        tail = tail->prev;
        tail->next = NULL;
        delete item;
    return value;
    }

    value = head->data;
    delete head;
    delete tail;
    head = tail = NULL;

    return value;
}

template <typename type_t>
list<type_t> &list<type_t>::push_front(type_t value){
    linked_node<type_t> * item = new linked_node<type_t>;
    if(!item) throw std::bad_alloc();

    item->data = value;

    if(head){
        item->next = head;
        head->prev = item;
    }
    head = item;
    if(!tail) tail = head;
    return *this;
}

template <typename type_t>
type_t list<type_t>::pop_front(){
    if(!head) throw std::out_of_range("Empty list");

    linked_node<type_t> * item;
    type_t value;

    if (head != tail && head){
        value = head->data;
        item = head;
        head->prev = NULL;
        head = head->next;
        delete item;

        return value;
    }

    value = tail->data;
    delete tail;
    delete head;
    head = tail = NULL;

    return value;
}

int main (int argc, char ** argv){

    list<int> numbers;
    numbers.push_back(5).push_back(13).push_front(22);

    numbers.print();


    return 0;
}
linked_node ptr=numbers.head;
下一步是收集数据;
下一步是收集数据;
下一步是收集数据;

但当您希望像在print()func中一样进行迭代时。什么也没有发生(没有错误或没有输出)。我无法解决或看到问题

听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:这里有很多人问了关于他们实现链表的问题。环顾四周,我相信你会找到一些想法来帮助你调试自己的问题。它在这里起作用:我可以看到
std::cout@RıfatTolgaKiran
linked_node*item=newlinked_node;如果(!item)抛出std::bad_alloc()——这也不可能发生在标准的ANSI C++编译器中。如果
new
失败,则自身将抛出异常。您的代码不需要检查空指针并抛出异常——如果
new
出现问题,代码将永远不会到达
if
语句。
linked_node<int> ptr = numbers.head;
cout << ptr->data << " ";
ptr = ptr->next;
cout << ptr->data << " ";
ptr = ptr->next;
cout << ptr->data << " ";
ptr = ptr->next;