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的概念,以及如何通过头文件和实现文件分离接口和实现。 - C++中的类和对象,以及如何在类中封装数据和行为。 - 测试和调试技巧,尤其是如何通过主函数`main()`来测试链表操作。 通过对这些知识点的理解和实践...
C/C++是两种广泛使用的编程语言,它们可以用来实现各种ADT,以满足实际应用的需求。 这个"基于C/C++的ADT演示系统"涵盖了数据结构的基础和重要部分,包括: 1. **线性表**:线性表是最基本的数据结构之一,由相同...
在C/C++编程中,ADT通过结构体和类来实现,提供了一种封装数据和相关操作的方式。 本项目"基于C/C++的数据结构ADT演示系统(全操作)"涵盖了多种基本和重要的数据结构及其操作,包括: 1. **线性表**:线性表是一...
通过对代码的阅读和分析,我们可以学习到C++中如何处理文本数据、如何实现数据结构以及如何设计和实现一个实际的软件项目。这不仅有助于提升C++编程技能,还能增强对数据结构和算法的理解,对于任何IT专业人士来说,...
在C++中,通过类来实现ADT,定义其成员变量和成员函数来描述数据结构的行为。 2. **C++模板**: C++的模板是一种泛型编程机制,允许程序员编写可以处理多种数据类型的代码。模板可以用于创建函数或类,使得它们能...
"链表实现集合交并补运算" 在计算机科学中,链表是一种基本的数据结构,它可以用来实现集合的交、并、补运算。...我们提供了完整的实现代码,包括链表的定义、基本操作的实现、模块结构和主函数的实现。
◆ 详细介绍了数据抽象,强调规范和实现之间的区别 ◆ 广泛介绍了各种面向对象的编程技术 ◆ 重点是核心的数据结构,而不是非必要的C++语言语法 ◆ 说明了类和ADT在问题解决过程中的作用 ◆ 诠释了ADT的主要...
总的来说,这个C++版链表课件涵盖了线性表的基本概念、ADT定义和链式存储结构,为学习者提供了全面理解线性表及其链式实现的基础。通过学习这部分内容,可以深入理解数据结构和算法,这对于计算机科学和软件开发领域...
C++中的类是实现ADT的主要工具,PPT会详细解释类的定义、构造函数、析构函数、成员函数、访问修饰符(public、private、protected)以及友元的概念。理解类的封装和继承机制是学习C++的关键,这有助于创建可维护、可...
例如,在C++中,数组和链表是实现线性表的两种不同物理结构。树结构和图结构也有各自的物理实现方法,如二叉树、堆、优先队列、邻接矩阵和邻接表等。 本教材的习题答案部分,提供了对概念的深刻理解以及对算法...
《C++数据结构 清华大学版》是深入学习数据结构和C++编程的重要教材,主要探讨了数据的组织方式、抽象数据类型以及C++中实现数据结构的相关概念和技术。 首先,数据结构是指数据的组织形式,它由一组数据元素集合...
在学习和实现数据结构时,理解其背后的逻辑和操作原理至关重要。这不仅可以帮助我们编写更高效、更可靠的代码,还能为解决实际问题提供理论基础。通过阅读“数据结构C++语言描述.pdf”这本书,读者可以深入学习这些...
在这个问题中,我们主要关注数据、数据结构、抽象数据类型及其在C++中的实现。 首先,我们要理解数据与信息的区别。数据是信息的载体,是描述客观事物的数、字符、符号的集合,可以是数字、文字、图像等各种形式。...
书中会讲解如何利用C++的特性来实现抽象数据类型(ADT),并通过封装和继承来增强代码的可读性和可维护性。此外,C++的模板机制使得数据结构的实现更加通用,能适应不同类型的数据。 关于数组,它是最基础的数据...
唐宁九的数据结构C++版源代码集很可能包含了一系列经典的抽象数据类型(ADT)和算法实现,如链表、栈、队列、树、图、散列表等。 1. **链表**:链表是一种动态数据结构,节点通过指针连接,而非在内存中连续存储。...
书中内容虽然适用于任何编程语言,但Van Wyk和Sedgewick提供的C++实现还利用了C++类与ADT(抽象数据类型)实现之间的自然匹配。 本书分为几个主要部分,每个部分包含若干章节,涵盖了算法、数据结构、抽象数据类型...
在本资料中,我们将深入探讨如何使用C++来理解和实现各种数据结构以及算法。 首先,我们要了解什么是数据结构。数据结构是组织、存储和管理数据的方式,它能有效地支持数据的操作和访问。常见的数据结构有数组、...
在C++中,类就是一种ADT,它封装了数据成员和成员函数,提供了一种创建自定义类型的方法。例如,我们可以定义一个`Student`类来表示“学生”表格中的记录,其中包含学号、姓名等属性,并提供查询和修改这些属性的...
C++中可以自定义结构体或类来表示链表节点,并通过指针操作实现插入、删除和遍历等操作。 - 双向链表与单链表的区别在于每个节点包含两个指针,分别指向前一个节点和后一个节点,这允许双向遍历。 3. 树: - 树是...