`
willzh
  • 浏览: 296689 次
  • 性别: 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
分享到:
评论

相关推荐

    线性链表的实现代码

    简单的代码。数据结构中的代码实现。

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

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

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

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

    Java LinkedList 双向链表实现原理

    简单的来讲一下什么是链表:首先链表是一种线性的数据结构(其他数据结构还有,树、图),是在每一个节点里存到下一个节点(next)的指针(Pointer)。 链表最大的好处则是采用了见缝插针的方式,链表中的每一个节点...

    双重:ES6的双重圆形和线性链表

    杜比ES6的双重圆形和线性链表描述具有TypeScript支持的圆形和线性双链表数据结构的ES6实现。 请访问以了解更多有关如何将此文档翻译成更多语言的信息。内容安装纱yarn add doublieNPM npm install doublie用法...

    【数据结构课程大作业】通信录管理系统

    该软件为本人数据结构课程设计作业,采用win32控制台程序,基于链表的增删改查,实现简单的通信录管理系统,具体可以参看我的博客http://blog.csdn.net/htq__/article/details/50846567

    数据结构 链式线性表逆置

    实现链式线性表的逆置,从链表处实现。代码简单,容易理解。

    双向环链表

    从实际应用出发重新定义线性链表及其基本操作,从新定义的链表结构更加直观,节俭,易懂,思路清晰。 从编写底层驱动的思路来编写了库,整个编写只为实现简单的链表结构代码,对于程序员来说,编写驱动要对用户...

    简单介绍线性表以及如何实现双链表

    本文先介绍线性表的几个基本组成部分:数组、单向链表、双向链表;随后给出双向链表的C、C++和Java三种语言的实现,需要的朋友可以参考下

    一元稀疏多项式简单计数器

    该一元稀疏多项式简单计数器是用C语言编写,采用线性链表的方式存储,能实现多项式的加减乘除,效率高。

    数据结构实验-实验一线性数据结构的实现与应用

    基于静态链表实现线性表 List2 的典型操作(判空、判满、求表长、插入、删除、查找、修改、遍历、置空、 普通构造),编写简单程序使用该线性表,测试和调试程序。 基于线性表 List1、线性表 List2 实现线性表的应用...

    A-Star算法求解旅行商问题

    数据结构是用线性链表实现的,非常的简单易懂,

    数据结构课程设计

    要求:(1)对冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的...

    C++编写的员工管理系统,dos界面,简单易懂

    实现对员工信息的排序、查询、更新、插入、删除。可以存储员工信息到文件、读取文件中的信息。  优势分析 ... 内容比较简单,采用大家熟悉的线性链表存储结构,难度不是很大,只要注意细节即可。

    VC一元稀疏多项式简单计算器(数据结构链表)

    本程序为云南大学软件学院数据结构实验,实验要求实现一元稀疏多项式的降幂排列、求导、加减乘;要求实现线性方程组求解。

    华南 数据结构上机实验代码 完整代码

    线性链表逆置 顺序栈的基本操作 循环队列的基本操作 栈的应用——进制转换 括号匹配检验 行编辑程序 表达式求值 队列的应用——银行客户平均等待时间 计算next值 KMP算法 二叉树的构建及遍历操作 实现...

    数据结构实验报告(1).doc

    2、会用线性链表解决简单的实际问题。 二、实验内容 题目一、该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及 对单链表操作的具体的函数定义和主函数。其中,程序中的单链表(带头结点)结点 ...

    链表实验报告1.doc

    2、会用线性链表解决简单的实际问题。 二、实验内容 题目一 链表基本操作 该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表操 作的具体的函数定义和主函数。其中,程序中的单链表...

    基于C语言实现的顺序表以及基本接口实现

    顺序表是一种线性存储结构,它采用一段连续的物理地址存储数据元素,具有元素随机存取、存储密度高、插入...通过运用C语言的数据类型和函数库,可以简单实现一个顺序表,并提供常用的接口操作,如插入、删除、查找等。

    【实验报告】 线性数据结构的实现与应用_双端队列_逆波兰式_呼叫中心_XAUAT_(原问题自杜克大学C++ Stacks and Queues and List

    1. 基于双链表实现双端队列的典型操作(判空、头插、头删、尾插、尾删、普通构造、拷贝构造、赋值运算符重载、析构),编写简单程序使用该双端队列,测试和调试程序。 2. 基于双端队列的头插、头删操作,完成栈的...

Global site tag (gtag.js) - Google Analytics