-东兴- 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 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号