`

c++链表ADT 和主要函数实现

    博客分类:
  • C++
阅读更多
template <class Type>
struct nodeType {
    int info;
    nodeType *next;
};

template <class Type>
class linkedListType {
    
    friend ostream& operator<< (ostream&, const linkedListType<Type>&);

public:
    const linkedListType<Type>& operator= (const linkedListType<Type>&);

    void initializedList();
    bool isEmptyList();
    int length();
    void destroyList();
    Type front();
    Type back();
    bool search(const Type& searchItem);
    void insertFirst(const Type& newItem);
    void insertLast(const Type& newItem);
    void deleteNode(const Type& deleteItem);

    linkedListType();
    linkedListType(const linkedListType<Type>& otherList);
    ~linkedListType();

protected:
    int count;
    nodeType<Type> *first;
    nodeType<Type> *last;

private:
    void copyList(const linkedListType<Type>& otherList);

};



主要函数实现
template <class Type>
bool linkedListType<Type>::search(const Type& searchItem) {
    nodeType<Type> *current;
    current = first;

    while(current!=NULL) {
        if(current->info == searchItem)
            return true;
        else
            current = current->next;
    }
    return false;
}

template <class Type>
void linkedListType<Type>::deleteNode(const Type& deleteItem) {
    nodeType<Type> *current;
    nodeType<Type> *trailCurrent;
    bool found;

    /*
     * if the list is empty
     */
    if(first == NULL)
        cerr<<"Cannot delete from an empty list.\n";

    /*
     * if the list is not empty
     */
    else {
        /*
         * if the delete item is equal to the first element of the list
         *
         */
        if(first->info == deleteItem) {
            current = first;
            first = first->next;
            count--;

            /*
             * if after delete the first element of list
             * the list become empty
             * do something(make the last pointer to be NULL)
             */
            if(first == NULL) {
             last = NULL;
             delete current;
          }
        }

        /*
         * if not equal to the first element of the list
         */
        else {
           found = false;
           trailCurrent = first;     
           current = first->next;

           /*
            *squence search the list
            */
           while(current!=NULL&&!found) {
               if(current->info != deleteItem) {
                   trailCurrent = current;
                   current = current->next;
               }else {
                   found = true;
               }
          }

           /*
            * if find the delete item in the list
            */
           if(found) {
               trailCurrent->next = current->next;
               count--;

               if(last==current)
                   last = trailCurrent;

               delete current;
           }else {
               cout<<"Item to be deleted is not in the list."<<endl;
           }
      }
  }

}





分享到:
评论

相关推荐

    链表ADT数据结构代码

    - ADT的概念,以及如何通过头文件和实现文件分离接口和实现。 - C++中的类和对象,以及如何在类中封装数据和行为。 - 测试和调试技巧,尤其是如何通过主函数`main()`来测试链表操作。 通过对这些知识点的理解和实践...

    基于C/C++的数据结构ADT演示系统

    C/C++是两种广泛使用的编程语言,它们可以用来实现各种ADT,以满足实际应用的需求。 这个"基于C/C++的ADT演示系统"涵盖了数据结构的基础和重要部分,包括: 1. **线性表**:线性表是最基本的数据结构之一,由相同...

    基于C/C++的数据结构ADT演示系统(全操作)

    在C/C++编程中,ADT通过结构体和类来实现,提供了一种封装数据和相关操作的方式。 本项目"基于C/C++的数据结构ADT演示系统(全操作)"涵盖了多种基本和重要的数据结构及其操作,包括: 1. **线性表**:线性表是一...

    文本编辑器C++代码

    通过对代码的阅读和分析,我们可以学习到C++中如何处理文本数据、如何实现数据结构以及如何设计和实现一个实际的软件项目。这不仅有助于提升C++编程技能,还能增强对数据结构和算法的理解,对于任何IT专业人士来说,...

    哈尔滨工业大学软件设计I 常用数据结构ADTc++实现 (使用模板类)保证原创

    在C++中,通过类来实现ADT,定义其成员变量和成员函数来描述数据结构的行为。 2. **C++模板**: C++的模板是一种泛型编程机制,允许程序员编写可以处理多种数据类型的代码。模板可以用于创建函数或类,使得它们能...

    用链表实现集合交并补等运算

    "链表实现集合交并补运算" 在计算机科学中,链表是一种基本的数据结构,它可以用来实现集合的交、并、补运算。...我们提供了完整的实现代码,包括链表的定义、基本操作的实现、模块结构和主函数的实现。

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    ◆ 详细介绍了数据抽象,强调规范和实现之间的区别 ◆ 广泛介绍了各种面向对象的编程技术 ◆ 重点是核心的数据结构,而不是非必要的C++语言语法 ◆ 说明了类和ADT在问题解决过程中的作用 ◆ 诠释了ADT的主要...

    数据结构C++版链表课件(精华)

    总的来说,这个C++版链表课件涵盖了线性表的基本概念、ADT定义和链式存储结构,为学习者提供了全面理解线性表及其链式实现的基础。通过学习这部分内容,可以深入理解数据结构和算法,这对于计算机科学和软件开发领域...

    大连理工大学国家示范性软件学院C++教学PPT

    C++中的类是实现ADT的主要工具,PPT会详细解释类的定义、构造函数、析构函数、成员函数、访问修饰符(public、private、protected)以及友元的概念。理解类的封装和继承机制是学习C++的关键,这有助于创建可维护、可...

    数据结构C++版

    例如,在C++中,数组和链表是实现线性表的两种不同物理结构。树结构和图结构也有各自的物理实现方法,如二叉树、堆、优先队列、邻接矩阵和邻接表等。 本教材的习题答案部分,提供了对概念的深刻理解以及对算法...

    C++数据结构 清华大学版 清华大学版

    《C++数据结构 清华大学版》是深入学习数据结构和C++编程的重要教材,主要探讨了数据的组织方式、抽象数据类型以及C++中实现数据结构的相关概念和技术。 首先,数据结构是指数据的组织形式,它由一组数据元素集合...

    数据结构习题解析-面向对象方法和C++语言描述-殷人昆.pdf

    在这个问题中,我们主要关注数据、数据结构、抽象数据类型及其在C++中的实现。 首先,我们要理解数据与信息的区别。数据是信息的载体,是描述客观事物的数、字符、符号的集合,可以是数字、文字、图像等各种形式。...

    数据结构C++语言描述

    在学习和实现数据结构时,理解其背后的逻辑和操作原理至关重要。这不仅可以帮助我们编写更高效、更可靠的代码,还能为解决实际问题提供理论基础。通过阅读“数据结构C++语言描述.pdf”这本书,读者可以深入学习这些...

    C++数据结构(英文版)

    书中会讲解如何利用C++的特性来实现抽象数据类型(ADT),并通过封装和继承来增强代码的可读性和可维护性。此外,C++的模板机制使得数据结构的实现更加通用,能适应不同类型的数据。 关于数组,它是最基础的数据...

    数据结构(C++版) 唐宁九

    唐宁九的数据结构C++版源代码集很可能包含了一系列经典的抽象数据类型(ADT)和算法实现,如链表、栈、队列、树、图、散列表等。 1. **链表**:链表是一种动态数据结构,节点通过指针连接,而非在内存中连续存储。...

    Algorithms in C++

    书中内容虽然适用于任何编程语言,但Van Wyk和Sedgewick提供的C++实现还利用了C++类与ADT(抽象数据类型)实现之间的自然匹配。 本书分为几个主要部分,每个部分包含若干章节,涵盖了算法、数据结构、抽象数据类型...

    数据结构和算法分析(c++)

    在本资料中,我们将深入探讨如何使用C++来理解和实现各种数据结构以及算法。 首先,我们要了解什么是数据结构。数据结构是组织、存储和管理数据的方式,它能有效地支持数据的操作和访问。常见的数据结构有数组、...

    c++高级程序设计语言

    在C++中,类就是一种ADT,它封装了数据成员和成员函数,提供了一种创建自定义类型的方法。例如,我们可以定义一个`Student`类来表示“学生”表格中的记录,其中包含学号、姓名等属性,并提供查询和修改这些属性的...

    《数据结构(C++版)(第2版)》例题代码(作者叶核亚)

    C++中可以自定义结构体或类来表示链表节点,并通过指针操作实现插入、删除和遍历等操作。 - 双向链表与单链表的区别在于每个节点包含两个指针,分别指向前一个节点和后一个节点,这允许双向遍历。 3. 树: - 树是...

Global site tag (gtag.js) - Google Analytics