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

问题描述

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<<"nn";

}

#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 listn"
<<"2 to insert at back of listn"
<<"3 to delete from beginning of listn"
<<"4 to delete from back of listn "
<<"5 to print the listn";
}
template< typename T >
void testList( List< T > listObject, const string &typeName )
{

cout<<"Testing a list of "<< typeName<<" valuesn ";
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 frontn";
        }
        listObject.print();
        break;
    case 4:
        if( listObject.removeFromBack( value ) )
        {
            cout<<value<<"removed from backn";
        }
        listObject.print();
        break;
    }
}while(choice<5);

cout<<"End";

}

时间: 2024-08-30 12:18:14

c++类 链表-C++代码,链表,无法解析的字符的相关文章

c++-在类中使用单链表,对象该怎么放到节点中?

问题描述 在类中使用单链表,对象该怎么放到节点中? 我用的是基本的单链表思想,Student是我的类,我把"Student next:"直接写在Student类里面,但是我不知道怎么把对象放到节点上.这是我写的类的单链表: /*Student *L, *s, *r; L = (Student *) malloc (sizeof(Student)); r = L; s = (Student *) malloc (sizeof(Student)); s->/这里不知道该写什么?*/

c c++-数据结构中用C++怎么把两个链表合成一个链表,一下是一对代码,请问主函数怎么写

问题描述 数据结构中用C++怎么把两个链表合成一个链表,一下是一对代码,请问主函数怎么写 求代码!#include template struct Node { DataType data; Node*next; }; template class Linklist { public: Linklist(DataType a[],int n); ~Linklist(); int Length(); DataType Get(int i); int Locate(DataType x); void

数据结构Java实现04----循环链表、仿真链表

单向循环链表 双向循环链表 仿真链表   一.单向循环链表: 1.概念: 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环. 和单链表相比,循环单链表的长处是从链尾到链头比较方便.当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表. 和单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作时,算法实现较为方便. 带头结点的循环单链表的操作实现方法和带头

浅谈PHP链表数据结构(单链表)_php实例

链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区,栈区,全局区,常量区,代码区) 规定:基本数据类型,一般放在栈区 复合数据类型,比如对象,放在堆区 定义一个类Hero 定义成员属性排名 $no 定义成员属性姓名 $name 定义成员属性昵称 $nickname 定义成员属性 $next,是一个引用,指向下一个Hero对象 定义构造函数,传递参数:

Android代码入侵原理解析(一)

Android代码入侵原理解析(一)           1.代码入侵原理 代码入侵,或者叫代码注入,指的是让目标应用/进程执行指定的代码.代码入侵,可以在应用进行运行过程中进行动态分析,也是对应用进行攻击的一种常见方式.我把代码入侵分为两种类型:静态和动态.静态代码入侵是直接修改相关代码,在应用启动和运行之前,指定代码就已经和应用代码关联起来.动态代码入侵是应用启动之后,控制应用运行进程,动态加载和运行指定代码. 2.静态代码入侵 静态代码入侵,有直接和间接的手段. 直接手段是修改应用本身代码

HTTP状态代码及其定义解析 Ajax捕捉回调错误参考_AJAX相关

HTTP状态代码及其定义解析 Ajax捕捉回调错误参考  状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述的是后面文档的MIME类型.虽然大多数应答都包含一个文档,但也有一些不包含,例如对HEAD请求的应答永远不会附带文档.有许多状态代码实际上用来标识一次失败的请求,这些应答也不包含文档(或只包含一个简短的错误信息说明). 当用户试图通过 HTTP 访问一台正在运行

JavaScript实现链表插入排序和链表归并排序_JSP编程

本篇文章详细的介绍了JavaScript实现链表插入排序和链表归并排序,链表的归并排序就是对每个部分都进行归并排序,然后合并在一起. 1.链表 1.1链表的存储表示 //链表的存储表示 typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode, *LinkList; 1.2基本操作 创建链表: /* * 创建链表. * 形参num为链表的长度,函数返回链表的头指针. */ Link

HTTP状态代码及其定义解析 Ajax捕捉回调错误参考

HTTP状态代码及其定义解析 Ajax捕捉回调错误参考 状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述的是后面文档的MIME类型.虽然大多数应答都包含一个文档,但也有一些不包含,例如对HEAD请求的应答永远不会附带文档.有许多状态代码实际上用来标识一次失败的请求,这些应答也不包含文档(或只包含一个简短的错误信息说明). 当用户试图通过 HTTP 访问一台正在运行 I

cv svm-OpenCV中CV_SVM中单类如何实现代码?

问题描述 OpenCV中CV_SVM中单类如何实现代码? 我现在想利用CV_SVM中的ONE_CLASS进行单类分类方法,但是又不知道该怎么样使用函数以及具体参数的设置. 以下是我参照多类别分类的代码,但是运行时报错,希望懂得人给点指导. #include "stdafx.h" #include #include #include #include #include using namespace std; int main(int arg,char **argv) { const i