`
willzh
  • 浏览: 300894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线性链表的简单实现

    博客分类:
  • c++
阅读更多
近日在复习数据结构,贴一下练习写的代码,线性链表:

// 如果这段代码对你有用,请任意处置。

#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;
}  
1
0
分享到:
评论

相关推荐

    线性链表的实现代码

    这里我们将深入探讨线性链表的概念、实现方式以及相关的编程代码。 线性链表的基本概念: 线性链表是由一系列节点组成的数据结构,每个节点包含两部分:数据域(存储数据)和指针域(指向下一个节点的引用)。链表...

    线性链表查询算法

    ### 线性链表查询算法 #### 一、引言 在计算机科学中,数据结构与算法是解决实际问题的基础。线性链表作为一种基本的数据结构,在许多场景下都有广泛的应用。对于线性链表而言,其核心操作包括插入、删除以及查询...

    线性链表的实现与操作.doc

    这篇实验报告探讨了如何使用线性链表实现特定的计算任务,包括长整数的加减运算以及解决约瑟夫环问题。 首先,实验要求设计一个程序来处理100位以内的长整数加减运算。为了实现这一功能,采用了链表作为数据结构,...

    线性链表 单链表 可运行C++和C结合的代码 结合严蔚敏编写

    本代码段是基于严蔚敏主编的《数据结构 C语言版》中关于线性链表的实现方法。严蔚敏的书籍是国内广泛使用的数据结构教材之一,其中详细介绍了各种数据结构的基本原理及其在C语言中的实现。 #### 三、代码分析 ####...

    创建线性链表

    线性链表在实际应用中非常广泛,比如用于实现栈、队列等其他数据结构。 #### 核心概念解释 1. **节点(Node)**:线性链表中的基本单元,通常包含两个部分:存储数据的字段和指向下一个节点的指针。 2. **头指针...

    线性链表的建立与显示

    线性链表是一种基本的数据结构,它在计算机科学中被广泛使用。相比于数组,链表在动态内存管理和插入、删除操作上具有优势,因为它不需要预先分配连续的内存空间。本篇文档介绍了如何建立和显示线性链表,通过两个...

    线性链表删除、插入、查询源代码

    简单的线性链表的建立、查询、插入、删除功能的C源程序

    xian线性链表课程设计

    线性链表是一种基本的数据结构,它在计算机科学中扮演着重要的角色,特别是在数据存储和算法实现方面。在这个“线性链表课程设计”中,我们将会深入探讨这个主题,并结合C语言进行实践操作。 线性链表不同于数组,...

    线性链表,栈(java版)代码

    "线性链表,栈(java版)代码"这个标题暗示了提供的代码可能包括线性链表和栈的Java实现,尤其是使用这些数据结构进行实际操作,如在main方法中可能有对链表和栈的操作演示。描述中的“最新”和“简单,易懂”意味着...

    C语言链表实现学生信息管理

    这是一个用C语言编写的简单程序,通过链表技术实现了学生信息的管理功能。用户可以通过简单的命令行界面执行各种操作,如添加、删除、修改、查询学生信息以及保存数据等。整个程序的代码可以复制到VC++ 6.0环境中...

    线性链表 链式存储 操作代码

    ### 线性链表与链式存储结构 在计算机科学中,链表是一种常见的数据结构,用于存储一系列元素。每个元素(称为节点)包含实际的数据部分和一个指向列表中下一个元素的链接。链表根据链接的方式不同可以分为单向链表...

    简易链表的实现

    ### 知识点详解 #### 一、链表的基本概念 **链表**是一种常见的线性数据结构,它与数组类似,...通过以上分析,我们可以了解到这个简易链表的实现方法及其工作原理,这对于理解链表的基础概念和操作是非常有帮助的。

    用类的方式实现C++链表功能

    本教程将介绍如何使用类的方式来实现一个简单的C++链表,包括链表的创建、插入、删除、修改和查找操作。下面我们将详细探讨这些知识点。 首先,链表的核心是链表节点,通常我们定义一个结构体或类来表示节点,它...

    13 基本操作顺序表、单链表、具有实用意义的线性链表.doc

    这些基本操作对于理解和实现线性链表至关重要,无论是在C语言还是其他编程语言中。掌握这些操作有助于设计和优化数据结构,以满足各种算法和应用程序的需求。在实际编程中,根据具体需求,可能还需要实现更多的链表...

    链表基本操作和图书管理系统

    - **用户界面**:虽然C语言不支持图形用户界面,但可以通过命令行交互实现简单的文本输入和输出,让用户与系统进行交互。 3. **C语言实践**: - **内存管理**:在C语言中,程序员需要手动管理内存,包括使用`...

    数据结构各类链表的实现

    例如,单链表适合简单的线性操作,双向链表适用于需要频繁进行正反向遍历的情况,而循环链表则在处理循环逻辑的问题时表现出色。在编程实践中,理解并熟练运用这些链表结构,能够提升程序的效率和可维护性。 在学习...

    动态链表的汇编语言实现

    在高级编程语言中,动态链表的创建和操作相对简单,但在汇编语言中实现则需要深入理解内存管理和指针操作。下面我们将详细讨论动态链表的汇编语言实现及其相关知识点。 首先,我们要了解动态链表的基本结构。每个...

    Python实现数据结构线性链表(单链表)算法示例

    本文实例讲述了Python实现数据结构线性链表(单链表)算法。分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码。 #!/usr/bin/python # -*- coding:...

    逆转线性单链表.doc

    总结起来,逆转线性单链表是通过改变链表节点之间的链接关系来实现的,具体方法是通过两个指针交替更新节点的 `next` 指针,最终达到逆转的效果。这个操作在理解和掌握链表操作中具有重要意义,也是数据结构与算法...

    数组和链表实现队列

    本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...

Global site tag (gtag.js) - Google Analytics