关闭

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

标签: 线性表链表链式存储
729人阅读 评论(0) 收藏 举报

线性表链式存储结构就是链表,刚开始定义该结构的时候,一直困惑于链表的成员变量是否只是一个节点头指针,觉得为什么不能将节点结构体的数据和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

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34792次
    • 积分:1187
    • 等级:
    • 排名:千里之外
    • 原创:72篇
    • 转载:38篇
    • 译文:0篇
    • 评论:0条