近日在复习数据结构,贴一下练习写的代码,线性链表:
// 如果这段代码对你有用,请任意处置。
#include <iostream>
#include <cstdlib>
using namespace std;
template<class Type> class LinkList;
template<class Type> class SNode
{
friend class LinkList<Type>;
private:
Type data;
SNode<Type> *next;
};
template<class Type> class LinkList
{
public:
LinkList();
~LinkList();
int Length();
void Insert(Type a, Type b);// insert element b after a
bool Delete(Type item);
SNode<Type> *Find(Type item);
bool isEmpty();
void Clear();
Type GetData(const SNode<Type> *p);
SNode<Type> *NextOf(const SNode<Type> *p);
private:
SNode<Type> *head;
};
template<class Type> LinkList<Type>::LinkList()
{
head = NULL;
}
template<class Type> LinkList<Type>::~LinkList()
{
Clear();
}
template<class Type> int LinkList<Type>::Length()
{
int len = 0;
SNode<Type> *p = head;
while(p)
{
len++;
p = p->next;
}
return len;
}
template<class Type> SNode<Type> *LinkList<Type>::Find(Type item)
{
SNode<Type> *p = head;
while(p)
{
if(p->data == item)
{
return p;
}
p = p->next;
}
return NULL;
}
template<class Type> void LinkList<Type>::Insert(Type a, Type b)
{
SNode<Type> *p = NULL;
SNode<Type> *newp = NULL;
if(head == NULL)
{
newp = new SNode<Type>;
newp->data = b;
newp->next = NULL;
head = newp;
}
else if((p = Find(a)) != NULL)
{
newp = new SNode<Type>;
newp->data = b;
p->next = newp;
newp->next = NULL;
}
}
template<class Type> bool LinkList<Type>::Delete(Type item)
{
SNode<Type>* p = head, *q = NULL;
while(p!=NULL)
{
if(p->data == item) break;
q = p;
p = p->next;
}
if(q==NULL)
{
head = p->next;
delete p;
}
else if(p == NULL)
{
return false;
}
else
{
q->next = p->next;
delete p;
}
return true;
}
template<class Type> Type LinkList<Type>::GetData(const SNode<Type> *p)
{
if(p!=NULL)
return p->data;
else
{
cerr<<"Error: ..."<<endl;
exit(1);
}
}
template<class Type> SNode<Type> *LinkList<Type>::NextOf(const SNode<Type> *p)
{
if(p!=NULL)
return p->next;
else
{
cerr<<"Error: ..."<<endl;
exit(1);
}
}
template<class Type> bool LinkList<Type>::isEmpty()
{
return head==NULL;
}
template<class Type> void LinkList<Type>::Clear()
{
SNode<Type> *p = head, *q = NULL;
while(p)
{
q = p;
p = p->next;
delete q;
}
head = NULL;
}
int main()
{
LinkList<int> ll;
SNode<int> *node;
ll.Insert(0,100);
ll.Insert(100,200);
cout<<"Length of ll: "<<ll.Length()<<endl;
node = ll.Find(100);
if(node != NULL)
{
cout<<ll.GetData(ll.NextOf(node))<<endl;
}
ll.Delete(200);
node = ll.Find(200);
if(node != NULL)
{
cout<<ll.GetData(node)<<endl;
}
else
{
cout<<"can't find 200"<<endl;
}
if(!ll.isEmpty())
{
cout<<"not empty"<<endl;
ll.Clear();
}
if(ll.isEmpty()) cout<<"empty now"<<endl;
return 0;
}
分享到:
相关推荐
这里我们将深入探讨线性链表的概念、实现方式以及相关的编程代码。 线性链表的基本概念: 线性链表是由一系列节点组成的数据结构,每个节点包含两部分:数据域(存储数据)和指针域(指向下一个节点的引用)。链表...
### 线性链表查询算法 #### 一、引言 在计算机科学中,数据结构与算法是解决实际问题的基础。线性链表作为一种基本的数据结构,在许多场景下都有广泛的应用。对于线性链表而言,其核心操作包括插入、删除以及查询...
这篇实验报告探讨了如何使用线性链表实现特定的计算任务,包括长整数的加减运算以及解决约瑟夫环问题。 首先,实验要求设计一个程序来处理100位以内的长整数加减运算。为了实现这一功能,采用了链表作为数据结构,...
本代码段是基于严蔚敏主编的《数据结构 C语言版》中关于线性链表的实现方法。严蔚敏的书籍是国内广泛使用的数据结构教材之一,其中详细介绍了各种数据结构的基本原理及其在C语言中的实现。 #### 三、代码分析 ####...
线性链表在实际应用中非常广泛,比如用于实现栈、队列等其他数据结构。 #### 核心概念解释 1. **节点(Node)**:线性链表中的基本单元,通常包含两个部分:存储数据的字段和指向下一个节点的指针。 2. **头指针...
线性链表是一种基本的数据结构,它在计算机科学中被广泛使用。相比于数组,链表在动态内存管理和插入、删除操作上具有优势,因为它不需要预先分配连续的内存空间。本篇文档介绍了如何建立和显示线性链表,通过两个...
简单的线性链表的建立、查询、插入、删除功能的C源程序
线性链表是一种基本的数据结构,它在计算机科学中扮演着重要的角色,特别是在数据存储和算法实现方面。在这个“线性链表课程设计”中,我们将会深入探讨这个主题,并结合C语言进行实践操作。 线性链表不同于数组,...
"线性链表,栈(java版)代码"这个标题暗示了提供的代码可能包括线性链表和栈的Java实现,尤其是使用这些数据结构进行实际操作,如在main方法中可能有对链表和栈的操作演示。描述中的“最新”和“简单,易懂”意味着...
这是一个用C语言编写的简单程序,通过链表技术实现了学生信息的管理功能。用户可以通过简单的命令行界面执行各种操作,如添加、删除、修改、查询学生信息以及保存数据等。整个程序的代码可以复制到VC++ 6.0环境中...
### 线性链表与链式存储结构 在计算机科学中,链表是一种常见的数据结构,用于存储一系列元素。每个元素(称为节点)包含实际的数据部分和一个指向列表中下一个元素的链接。链表根据链接的方式不同可以分为单向链表...
### 知识点详解 #### 一、链表的基本概念 **链表**是一种常见的线性数据结构,它与数组类似,...通过以上分析,我们可以了解到这个简易链表的实现方法及其工作原理,这对于理解链表的基础概念和操作是非常有帮助的。
本教程将介绍如何使用类的方式来实现一个简单的C++链表,包括链表的创建、插入、删除、修改和查找操作。下面我们将详细探讨这些知识点。 首先,链表的核心是链表节点,通常我们定义一个结构体或类来表示节点,它...
这些基本操作对于理解和实现线性链表至关重要,无论是在C语言还是其他编程语言中。掌握这些操作有助于设计和优化数据结构,以满足各种算法和应用程序的需求。在实际编程中,根据具体需求,可能还需要实现更多的链表...
- **用户界面**:虽然C语言不支持图形用户界面,但可以通过命令行交互实现简单的文本输入和输出,让用户与系统进行交互。 3. **C语言实践**: - **内存管理**:在C语言中,程序员需要手动管理内存,包括使用`...
例如,单链表适合简单的线性操作,双向链表适用于需要频繁进行正反向遍历的情况,而循环链表则在处理循环逻辑的问题时表现出色。在编程实践中,理解并熟练运用这些链表结构,能够提升程序的效率和可维护性。 在学习...
在高级编程语言中,动态链表的创建和操作相对简单,但在汇编语言中实现则需要深入理解内存管理和指针操作。下面我们将详细讨论动态链表的汇编语言实现及其相关知识点。 首先,我们要了解动态链表的基本结构。每个...
本文实例讲述了Python实现数据结构线性链表(单链表)算法。分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码。 #!/usr/bin/python # -*- coding:...
总结起来,逆转线性单链表是通过改变链表节点之间的链接关系来实现的,具体方法是通过两个指针交替更新节点的 `next` 指针,最终达到逆转的效果。这个操作在理解和掌握链表操作中具有重要意义,也是数据结构与算法...
本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...