线性表链式存储结构的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

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

一般线性链表类的C++实现

以下的C++类LinkList实现了线性链表的一般操作。可以直接在其他的程序中直接建立它的对象,其中线性表中的数据在此为整型,具体应用的时候可以适当的修改,并可以在此基础上继续封装特定的功能。头文件:...
  • ffee
  • ffee
  • 2005年10月09日 19:50
  • 1894

线性表的链式存储结构c++模板类实现

  • 2015年06月20日 21:52
  • 222KB
  • 下载

C++ 模版类的单向链式线性表

先上代码!以后再仔细编辑! 头文件 #pragma once template class ChainList { public: struct Node { EleType _data...
  • shiwazone
  • shiwazone
  • 2015年07月22日 11:04
  • 1011

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

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

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

类的具体实现如下: ///////////////////////// #include"LinearList.h" #include #include using namespace ...
  • u013467442
  • u013467442
  • 2015年06月18日 13:43
  • 1008

c++数据结构之线性表:间接寻址类模板的实现

线性表之间接寻址
  • chiling_1024
  • chiling_1024
  • 2017年10月03日 13:38
  • 226

JAVA实现线性表的链式存储结构LinkedList

线性表的链式存储结构,实现思路是默认持有一个空节点,且每个节点持有前继节点和后继节点的索引 linkedlist使用的是双向循环链表,同时也是队列结构 优点:方便增加和删除元素。缺...
  • Timmy_zzh
  • Timmy_zzh
  • 2016年11月24日 08:58
  • 413

线性表链式存储结构基本操作

#include "stdio.h" #include "string.h" #include "ctype.h" #include "stdlib.h" #include ...
  • gacmy
  • gacmy
  • 2016年08月18日 18:32
  • 1036

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

线性表链式存储结构就是链表,刚开始定义该结构的时候,一直困惑于链表的成员变量是否只是一个节点头指针,觉得为什么不能将节点结构体的数据和next节点指针直接作为链表的成员变量呢?现在回过头来想想,是混淆...
  • Alex123980
  • Alex123980
  • 2016年05月31日 19:58
  • 1073

数据结构_线性表总结

  • 2017年04月23日 12:54
  • 1000KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性表链式存储结构的C++模板类程序源代码
举报原因:
原因补充:

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