`
moxiaomomo
  • 浏览: 45717 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

单链表的创建和一些操作

阅读更多
个人创建的一个类,实现单链表的基本操作,算是对数据结构知识的一点温习...


#ifndef TEMPLIST_H
#define TEMPLIST_H

#include <math.h>
#include<stdio.h>

template <class T>
class Node
{
public:
	T mydata;
	Node<T>* next;

	Node()                   //构造节点
	{
		next=NULL;   //data域尚未初始化
	}
	Node(T data,Node<T>* next1=NULL)      //构造节点,指定元素和后继结点
	{
		mydata=data;
		next=next1;
	}
};

template <class T>
class SingleLinkedList             //单链表类
{
public:
	Node<T>* head;             //头指针

	SingleLinkedList();        //构造空单链表         
	SingleLinkedList(T value[],int n);//构造由指定数组提供元素的单链表
	~SingleLinkedList();    //析构

	bool isEmpty();       //判断单链表是否为空
	void concat(SingleLinkedList<T> &list);       //将list链接在当前单链表之后
	void clear();            //清空单链表
	bool remove(int i);

	Node<T>* insert(int i,T x);
	Node<T>* getNode(int i);
	T get(int i);
	int length();            //获取链表长度
	T update(int i,T a);    //更新元素值
};

template <class T>
SingleLinkedList<T>::SingleLinkedList()
{
	this->head=NULL;
}

template <class T>
SingleLinkedList<T>::SingleLinkedList(T value[],int n)
{
	head=NULL;
	if(n>0)
	{
		head=new Node<T>(value[0]);
		Node<T>* rear = head;
		int i=1;
		while(i<n)            //将数组元素逐个链接到单链表上
		{
			rear->next = new Node<T>(value[i++]);
			rear = rear->next;
		}
	}
}

template <class T>
SingleLinkedList<T>::~SingleLinkedList()
{
	clear();
}

template <class T>
int SingleLinkedList<T>::length()
{
	int i=0;
	Node<T>* p=head;
	while(p!=NULL)
	{
		i++;
		p=p->next;
	}
	return i;
}

template <class T>
Node<T>* SingleLinkedList<T>::insert(int i,T x)
{
	Node<T>* q=NULL;
	if(head==NULL||i<=0)
	{
		q=new Node<T>(x,head);
		head=q;
	}
	else
	{
		int j=0;
		Node<T>* p=head;
		while(p->next!=NULL&&j<i-1)
		{
			j++;
			p=p->next;
		}
		q=new Node<T>(x,p->next);
		p->next=q;
	}
	return q;
}

template <class T>
bool SingleLinkedList<T>::remove(int i)      //在i位置删除元素
{
	if(head!=NULL&&i>=0)
	{
		if(i==0)
		{
			Node<T>* q=head;
			head=head->next;
			delete q;
			return true;
		}
		else
		{
			Node<T>* p=getNode(i-1);
			if(p!=NULL&&p->next!=NULL)
			{
				Node<T>* q=p->next;
				p->next=q->next;
				delete q;
				return true;
			}
		}

	}
	return false;
}

template <class T>
T SingleLinkedList<T>::update(int i,T a)
{
	Node<T>* p=getNode(i);
	p->mydata+=a;
	return p->mydata;
}

template <class T>
Node<T>* SingleLinkedList<T>::getNode(int i)
{
	if(i<0)
		return NULL;
	int j=0;
	Node<T>* p=head;                //获取结点指针
	while(p!=NULL&&j<i)
	{
		j++;
		p=p->next;
	}
	return p;
}

template <class T>
T SingleLinkedList<T>::get(int i)
{
	Node<T>* p=getNode(i);

	if(p!=NULL)
		return p->mydata;         //查找元素
	throw"指定元素序号无效";
}


template <class T>
void SingleLinkedList<T>::clear()
{
	Node<T>* p=head;
	while(p!=NULL)
	{
		Node<T>* q = p;
		p=p->next;                   //逐个删除表元素
		delete q;
	}
	head=NULL;
}

template <class T>
bool SingleLinkedList<T>::isEmpty()
{
	return head==NULL;
}

template <class T>
void SingleLinkedList<T>::concat(SingleLinkedList<T> &list)
{
	if(this->head==NULL)
		this->head=list.head;
	else{
		Node<T>* p = head;
		while(p->next!=NULL)          //找到最后一个节点
		{
			p=p->next;
		}
		p->next=list.head;             //连接两条单链表
	}
	list.head=NULL;             //设置单链表为空,否则运行错
}

#endif

1
5
分享到:
评论

相关推荐

    单链表的创建、插入、删除

    #### 单链表创建 单链表的创建可以通过两种方式实现:尾插法和头插法。给定代码实现了头插法创建单链表的功能。头插法是从链表头部开始插入新节点,使新节点成为链表的新头部。 ```c void creat_touchafa(LinkList ...

    使用C++实现单链表的基本操作:1、创建单链表2、遍历单链表3、单链表插入4、删除单链表5、判断是否为空6、单链表的

    本文将详细阐述如何使用C++来实现单链表的基本操作,包括创建、遍历、插入、删除、判断空、计算长度以及查找节点。 首先,我们从创建单链表开始。单链表是由一系列节点组成的数据结构,每个节点包含一个数据元素和...

    单链表的创建和插入

    ### 单链表的创建与插入 #### 一、单链表基础知识 单链表是一种基本的数据结构,其中...以上就是关于“单链表的创建和插入”的全部知识点,包括了单链表的基本概念、创建过程、插入操作以及输出操作的具体实现方法。

    单链表创建,插入删除的基本功能

    以上就是关于单链表创建、插入和删除的基本知识点,希望对初学者有所帮助。在实际编码过程中,要注意内存管理,避免内存泄漏。同时,理解并熟练掌握链表的动态特性,将有助于解决实际问题。在学习过程中,可以结合...

    C语言单链表创建打印

    在本示例中,我们将讨论如何在C语言中创建和打印单链表,以及在Visual C++6.0环境下编译此类程序。 首先,我们需要定义链表节点的结构体。结构体通常如下所示: ```c typedef struct Node { int data; // 数据域 ...

    单链表的基本操作验证

    ### 数据结构实验:单链表的基本操作验证 #### 引言 ...通过这些操作的验证,不仅加深了对单链表结构的理解,还锻炼了程序设计和问题解决的能力,为后续更复杂的算法和数据结构学习奠定了坚实的基础。

    单链表的创建、遍历及删除

    这个VC工程提供了一个学习单链表操作的例子,包括创建链表、遍历链表和删除链表节点。 1. **创建单链表**: 创建单链表的过程是从无到有建立链表的过程。首先,需要定义一个链表节点结构,通常包含一个数据域和一...

    单链表的基本操作及实现

    单链表是一种基础的数据结构,它在...总的来说,理解和掌握单链表的基本操作对于学习数据结构和算法至关重要,它是许多高级数据结构如双链表、哈希表等的基础。通过熟悉这些操作,能够为编写高效的程序打下坚实的基础。

    单链表的创建于逆转

    熟练掌握单链表的创建和操作,有助于进一步学习更复杂的数据结构,如双链表、循环链表,甚至高级的树结构和图。而逆转链表是一个经典的算法问题,经常出现在面试和编程竞赛中,对提高解决问题的能力非常有帮助。在...

    单链表操作基本运算_单链表的基本操作_

    这个压缩包文件“单链表操作基本运算”包含了关于如何在编程中实现单链表基本操作的详细内容,特别是插入和删除操作。 单链表的插入操作通常分为头插法和尾插法。头插法是在链表的开头添加新节点,这需要更新头节点...

    单链表的基本操作(实验)

    并将创建好的单链表元素依次打印在屏幕上。(注意:选择头插法或者尾插法!) (2) 设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找数据元素,和求单链表表长等几项功能。 (3) 当选择...

    单链表的创建插入删除

    单链表的基本操作,创建,插入 删除遍历,显示输出

    单链表 前插 后插 创建

    在这个资源中,重点讲解了单链表的前插和后插操作,这两种插入方法对于理解和操作单链表至关重要。 **前插操作(Prepend Insertion)** 前插操作是在链表的第一个元素(头节点)之前插入新节点。执行这个操作时,...

    数据结构单链表插入、删除和修改实验报告

    数据结构单链表插入、删除和修改实验报告 一、实验目的 1.理解数据结构中带头结点单链表的定义和逻辑图表示方法。 2.掌握单链表中结点结构的JAVA描述。 3.熟练掌握单链表的插入、删除和查询算法的设计与JAVA实现...

    单链表的创建、插入、删除等基本操作

    实现了单链表的创建、插入、删除等基本操作是新手学习的很好的参考,我也是个菜鸟,分享了,大家一起来学习

    C/C++单链表的一些操作

    在计算机科学中,数据...总结来说,C/C++中的单链表是通过节点间的指针连接形成的数据结构,提供了多种操作,如插入、删除、查找、遍历、反转和排序。理解和熟练掌握这些操作对于提升编程技能和解决实际问题至关重要。

    单链表的各种操作实现

    本文将详细介绍单链表的基本概念,并基于给定的代码示例,深入探讨单链表的多种操作方法,包括但不限于插入、查找(按值和按位置)、逆置以及删除等。 #### 单链表的概念与结构 单链表是一种线性数据结构,其中每个...

    线性单链表的演示详细操作

    线性单链表是计算机科学中一种基本的数据...总之,线性单链表是一种重要的数据结构,它的操作包括插入、删除、查找和遍历,这些操作通过指针的调整来完成。理解和熟练掌握线性单链表的使用对于提升编程技能至关重要。

    单链表的基本操作.c

    用C语言写的用于实现单链表的基本操作的源代码,...定义单链表类型并动态创建单链表 1、实现线性表链式存储结构下元素的插入操作 3、实现线性表链式存储结构下元素的删除操作 4、实现线性表链式存储结构下取元素操作

    数据结构试验 单链表的基本操作及应用

    单链表在许多算法和程序设计中都有广泛的应用。 单链表是一种线性数据结构,每个元素(节点)包含两部分:数据域和指针域。数据域存储实际的数据,而指针域存储指向下一个节点的引用。由于链表的元素不需在内存中...

Global site tag (gtag.js) - Google Analytics