-东兴- 2014-07-01 04:05 采纳率: 0%
浏览 831

C++代码,链表,无法解析的字符

#ifndef LIST_H
#define LIST_H

#include"ListNode.h"

template< typename NODETYPE >
class List
{
public:
List();
~List();
void insertAtFirst( const NODETYPE & );
void insertAtLast( const NODETYPE & );
bool removeFromFront( NODETYPE & );
bool removeFromBack( NODETYPE & );
bool isEmpty() const;
void print() const;
private:
ListNode< NODETYPE > *firstPtr;
ListNode< NODETYPE > *lastPtr;
ListNode< NODETYPE > *getNewNode( const NODETYPE & );
};

#endif

#ifndef LISTNODE_H
#define LISTNODE_H

template< typename NODETYPE > class List;

template< typename NODETYPE >
class ListNode
{
friend class List< NODETYPE >;

public:
ListNode( const NODETYPE & ) ;
NODETYPE getData( ) const ;
private:
NODETYPE data;
ListNode< NODETYPE > *nextPtr;
};

#endif

#include"List.h"
#include
using namespace std;

template< typename NODETYPE >
List< NODETYPE >::List():firstPtr( NULL ),lastPtr( NULL )
{

}

template< typename NODETYPE >
List< NODETYPE >::~List()
{
if( !isEmpty() )
{
ListNode< NODETYPE > *currentPtr=firstPtr;
ListNode< NODETYPE > *tempPtr=NULL;

    while( currentPtr!=NULL )
    {
        tempPtr=currentPtr;
        cout<<tempPtr->data<<"\t";
        currentPtr=currentPtr->nextPtr;
        delete tempPtr;
    }
}

}

template< typename NODETYPE >
void List< NODETYPE >::insertAtFirst( const NODETYPE &value)
{
ListNode< NODETYPE > *newPtr=getNewNode( value )

if( isEmpty() )
{
    firstPtr=lastPtr=newPtr;
}
else
{
    newPtr->nextPtr=firstPtr;
    firstPtr=newPtr;
}

}

template< typename NODETYPE >
void List< NODETYPE >::insertAtLast( const NODETYPE &value )
{
ListNode< NODETYPE > *newPtr=getNewNode( value );

if( isEmpyt() )
{
    firstPtr=lastPtr=newPtr
}
else
{
    newPtr->nextPtr=firstPtr;
    firstPtr=newPtr;
}

}

template< typename NODETYPE >
bool List< NODETYPE >::removeFromFront( NODETYPE &value )
{
if( isEmpty() )
{
return false;
}
else
{
ListNode< NODETYPE > *tempPtr=firstPtr;

    if( firstPtr==lastPtr )
    {
        firstPtr=lastPtr=NULL;
        delete tempPtr;
        return true;
    }
    else 
    {
        firstPtr=firstPtr->nextPtr;
        value=tempPtr->data;
        delete tempPtr;
        return true;
    }
}

}

template< typename NODETYPE >
bool List< NODETYPE >::removeFromBack( NODETYPE &value )
{
if( isEmpty() )
{
return false;
}
else
{
ListNode< NODETYPE > *tempPtr=lastPtr;

    if( firstPtr==lastPtr )
    {
        firstPtr=lastPtr=NULL;
        delete tempPtr;
        return true;
    }
    else
    {
        ListNode< NODETYPE > *currentPtr=firstPtr;

        while( cuurentPtr!=lastPtr )
        {
            currentPtr=currentPtr->nextPtr;
        }
        lastPtr=currentPtr;
        currentPtr->nextPtr=NULL;
        value=tempPtr->data;
        delete tempPtr;
        return true;
    }
}

}

template< typename NODETYPE >
bool List< NODETYPE >::isEmpty() const
{
return ( firstPtr==NULL );
}

template< typename NODETYPE >
ListNode< NODETYPE > *List< NODETYPE >::getNewNode( const NODETYPE &value )
{
return ( new ListNode< NODETYPE >( value ) );
}

template< typename NODETYPE >
void List< NODETYPE >::print() const
{
if( isEmpty() )
{
cout<<"The list is empty"<<endl;
return;
}

ListNode<NODETYPE> *currentPtr=firstPtr;

cout<<"The list is:"<<endl;

while( currentPtr!=NULL )
{
    cout<<currentPtr->data;
    currentPtr=currentPtr->nextPtr;
}

cout<<"\n\n";

}

#include"ListNode.h"

template< typename NODETYPE >
ListNode < NODETYPE > ::ListNode(const NODETYPE& info ):data( info ), nextPtr( NULL )
{

}

template< typename NODETYPE >
NODETYPE ListNode< NODETYPE > ::getData() const
{
return data;
}

#include
#include
#include"List.h"
using namespace std;

void instructions();

template< typename T >
void testList( List< T > &, const string &);

int main()
{
List< int > integerList;
testList( integerList, "integer" );
}

void instructions()
{
cout<<"Enter one of the followings:\n"
<<"1 to insert at beginning of list\n"
<<"2 to insert at back of list\n"
<<"3 to delete from beginning of list\n"
<<"4 to delete from back of list\n "
<<"5 to print the list\n";
}
template< typename T >
void testList( List< T > listObject, const string &typeName )
{

cout<<"Testing a list of "<< typeName<<" values\n ";
instructions();

int choice;
T value;

do
{
    cout<<"?";
    cin>>choice;

    switch( choice )
    {
    case 1:
        cout<<"Enter"<<typeName<<";";
        cin>>value;
        listObject.insertAtFirst( value );
        listObject.print();
        break;
    case 2:
        cout<<"Enter"<<typeName<<":";
        cin>>value;
        listObject.insertAtLast( value );
        listObject.print();
        break;
    case 3:
        if( listObject.removeFromFront( value ) )
        {
            cout<<value<<"removed from front\n";
        }
        listObject.print();
        break;
    case 4:
        if( listObject.removeFromBack( value ) )
        {
            cout<<value<<"removed from back\n";
        }
        listObject.print();
        break;
    }
}while(choice<5);

cout<<"End";

}

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-16 12:22
    关注

    该回答引用ChatGPT

    这是一个 C++ 的链表模板类,由两个头文件和一个源文件组成。


    List.h 头文件定义了 List 类,包含链表的一些基本操作函数的声明,以及一个 ListNode 类型的指针,用于指向链表的首尾节点。同时,还包含了 ListNode.h 头文件。


    ListNode.h 头文件定义了 ListNode 类,是链表的节点类,包含了节点数据以及指向下一个节点的指针。


    List.cpp 源文件是 List 类的实现文件,包含了 List 类各个函数的实现,以及 ListNode 类的构造函数和获取节点的函数的实现。


    在代码中出现了一些拼写错误,例如 isEmpty() 函数中的 isEmpyt(),以及 insertAtLast() 函数中第二个 if 判断条件错误,应该是 lastPtr 而不是 firstPtr。此外,在 insertAtFirst() 函数中缺少了分号。

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置