个人创建的一个类,实现单链表的基本操作,算是对数据结构知识的一点温习...
#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
分享到:
相关推荐
使用C++实现单链表的基本操作: 1、创建单链表 2、遍历单链表 3、单链表插入 4、删除单链表 5、判断是否为空 6、单链表的长度 7、单链表查找 8、退出
单链表的基本操作及实现单链表的基本操作及实现单链表的基本操作及实现
并将创建好的单链表元素依次打印在屏幕上。(注意:选择头插法或者尾插法!) (2) 设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找数据元素,和求单链表表长等几项功能。 (3) 当选择...
单链表的基本操作,创建,插入 删除遍历,显示输出
数据结构 实验2 单链表上的操作 数据结构 实验2 单链表上的操作 数据结构 实验2 单链表上的操作
实现了单链表的创建、插入、删除等基本操作是新手学习的很好的参考,我也是个菜鸟,分享了,大家一起来学习
用C语言写的用于实现单链表的基本操作的源代码,...定义单链表类型并动态创建单链表 1、实现线性表链式存储结构下元素的插入操作 3、实现线性表链式存储结构下元素的删除操作 4、实现线性表链式存储结构下取元素操作
实现单链表的基本操作,可以作为初学者学习交流使用
经典单链表的创建与单链表项的逆转,C++代码实现
单链表的基本操作的实现,这个程序中演示了单链的初始化、前插法、后插法、单链表删除、查找以及输出等功能。使用c语言所写。
这里有封装好的单链表,里面包含了各种单链表的实现过程
1、从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。 2、分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。 3、删除...
单链表的插入 查找(按值和按位) 逆置 删除等操作 菜单形式显示
该文件包括单链表的所有操作的C++源代码。 比如: 单链表的创建;单链表的长度;单链表的打印;单链表的删除结点;单链表的插入;单链表的排序;单链表的逆置;求单链表的中结点。 希望对数据结构爱好者有帮助。
C单链表的基本操作
用链表创建的学生信息故那里系统,包括添加,删除,修改,查询,统计,排序,等基本操作,本系统用C语言编写。
程序源代码实现了单链表的创建、插入和删除操作!
员工信息操作,单链表的建立,查询,插入,删除
单链表的实现-简单操作
单链表的基本操作,单链表头插法、尾插法、创建、插入、删除、遍历