线性表链式存储结构的C++模板类程序源代码

原创 2016年05月31日 19:58:45

线性表链式存储结构就是链表,刚开始定义该结构的时候,一直困惑于链表的成员变量是否只是一个节点头指针,觉得为什么不能将节点结构体的数据和next节点指针直接作为链表的成员变量呢?现在回过头来想想,是混淆了链表和节点的概念,节点就是个独立的数据结构,而链表使用节点头指针表示一系列节点组成的序列。若直接将data和next作为链表的成员变量,那么我定义了一个链表,它具有一个data和一个指向其他链表的指针,那么在链表中增加变量就是一系列链表,整个逻辑关系就非常混乱,不可取。所以节点和链表都是单独的,查了一些资料,节点和链表的实现可以采用4中方法:嵌套类、复合类、继承类、结构体定义节点。这四种方法的介绍可以通过静默虚空同学的博客。(http://www.cnblogs.com/jingmoxukong/p/3827011.html)本文采用第四种方法进行构造,具体源代码如下所示:

//linkedlist
#ifndef LINKEDLIST
#define LINKEDLIST
template<class Type>
struct LinkNode{
Type data;
LinkNode<Type>* next;
};
template<class Type>
class LinkedList{
private: 
LinkNode<Type>* head;
public:
LinkedList();
~LinkedList();
bool Insert(int position,Type x);
bool Delete(int position);
int Find(Type x);
int GetSize();
void Print();
};


template<class Type>
LinkedList<Type>::LinkedList()
{
head=new LinkNode<Type>;
head->data=1111;
head->next=NULL;
}
template<class Type>
LinkedList<Type>::~LinkedList(){
LinkNode<Type>* temp=head;
while(temp)
{
   LinkNode<Type>* tempbefore=temp;
temp=temp->next;
delete tempbefore;
}
}
template<class Type>
bool LinkedList<Type>::Insert(int position,Type x)
{
if(position<=0||position>GetSize()+1)
return false;
LinkNode<Type>* temp=head;
for(int i=1;i<position;i++)
{
temp=temp->next;
}
LinkNode<Type>* node=new LinkNode<Type>;
node->data=x;
node->next=temp->next;
temp->next=node;
return true;
}
template<class Type>
bool LinkedList<Type>::Delete(int position)
{
if(position<=0||position>GetSize())
return false;
LinkNode<Type>* temp=head;
for(int i=1;i<position;i++)
{
temp=temp->next;
}
LinkNode<Type>* tempnext=temp->next;
temp->next=temp->next->next;
delete tempnext;
return true;
}
template<class Type>
int LinkedList<Type>::Find(Type x)
{
LinkNode<Type>* temp=head;
int i=1;
while(temp)
{
temp=temp->next;
if(temp->data==x)
{
return i;
}
i++;
}
return -1;
}
template<class Type>
int LinkedList<Type>::GetSize()
{
LinkNode<Type>* temp=head->next;
int size=0;
while(temp)
{
size++;
temp=temp->next;
}
return size;
}
template<class Type>
void LinkedList<Type>::Print()
{
LinkNode<Type>* temp=head->next;
while(temp)
{
std::cout<<temp->data<<" ";
temp=temp->next;
}
std::cout<<std::endl;
}
#endif

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C++线性表链式存储结构

本来想要在头结点的数据域存放链表长度,结果后来这样反而出了一些麻烦#include using namespace std; #define MAXSIZE 123 typedef int E...
  • LLLCSDN
  • LLLCSDN
  • 2015年12月11日 21:15
  • 738

数据学习之线性表的链式存储C++实现

最近一直在中国大学MOOC网上选修了浙江大学的《数据结构》课程。第二周的课程讲了线性表、堆栈和队列三种抽象数据类型。接下来三篇博客就这三种抽象数据类型进行总结和描述,并贴出C++实现的结构和主要的操作...

C++ 线性表顺序存储结构

随着逐渐学习,更深入的体会了C是面向过程,C++是面向对象这一说法。下面的代码用类封装了一个顺序存储的线性表,仅供参考,有错误请指教,毕竟新手。 将元素类型定义为别名,可以方便更改。对于顺序表,最基...
  • LLLCSDN
  • LLLCSDN
  • 2015年12月09日 15:16
  • 1946

C++实现顺序存储的线性表

在Visual Studio2012环境下用C++实现了顺序表的基本操作

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

[数据结构]二叉树之二叉链表的类模板实现

该类模板实现了一个二叉树的模板类,采用二叉链表实现。定义二叉树节点类,采用二叉链表实现。///////////////////////// #include #include #include ...

线性表链式存储设计与实现 - API实现

基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。 表头结点 链表中的第一个结点,包...

[数据结构]线性表之顺序表的类模板实现

LinearList.h抽象基类: #ifndef LINEARLIST #define LINEARLIST //线性表的抽象基类 template class LinearList {...

【C++】模板类顺序表

1.什么是模板     模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。如果我们写一个普通的顺序表,那它只能满足一种数据存储类型,之后如果想把这个顺序表改成其他数据类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性表链式存储结构的C++模板类程序源代码
举报原因:
原因补充:

(最多只允许输入30个字)