单链表

来源:互联网 发布:一键php加mysql环境 编辑:程序博客网 时间:2024/06/05 01:09
#include<iostream>
using namespace std;
const int MaxSize=100;
template<class DataType>
struct Node
{
DataType data;
Node<DataType>*next;
};
template<class DataType>
class LinkList
{
public:
LinkList();
~LinkList();
LinkList(DataType a[],int n);
int Length();
DataType Get(int i);
int Locate(DataType x);
void Insert(int i,DataType x);
DataType Delete(int i);
void PrintList();
private:
int length;
Node<DataType>*first;
};
template<class DataType>
LinkList<DataType>::LinkList(DataType a[], int n)
{
Node<DataType> *h, *t;
first = new Node<DataType>; //生成头结点
h = first; //尾指针初始化
for (int i = 0; i < n; i++)
{
t = new Node<DataType>; t->data = a[i]; //为每个数组元素建立一个结点
h->next = t; h = t; //将结点s插入到终端结点之后
}
h->next = NULL;  
}



template<class DataType>
int LinkList<DataType>::Length()
{
Node<DataType> *p = NULL;
p=first->next;
int count=0;
while(p!=NULL)
{
p=p->next;
count++;
}
return count;
}

template<class DataType>
DataType LinkList<DataType>::Get(int i)
{
Node<DataType> *p;
p=first->next;
int count=1;
while(p!=NULL&&count<i)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else return p->data;

}

template<class DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType> *p;
p=first->next;
int count=1;
while(p!=NULL)
{
if(p->data==x)return count;
p=p->next;
count++;
}
return 0;
}

template<class DataType>
void LinkList<DataType>::Insert(int i,DataType x)
{
Node<DataType> *p = first;
p=first;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL) throw"位置";
else{
t=new Node;t->data=x;
t->next=p->next;p->next=t;

}
}
//删除算法

template<class DataType>
DataType LinkList<DataType>::Delete(int i)
{
Node<DataType> *p = NULL;
p=first;count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p=NULL||p->next==NULL)
throw"位置"
else{
q=p->next;x=q->next;
delete q;
return x;
}

}
template<class DataType>
int main()
{
int arr[6] = {1,5,44,6,15,70};
LinkList<int> demo(arr,1);

cout<<"输出所有信息:"<<endl;
demo.PrintList();
cout << "删除的信息:" << endl;
cout << demo.Delete(3) << endl;
cout << "删除后的信息:" << endl;
demo.PrintList();
system("pause");
cout << "增加的信息:" << endl;
cout << "10" << endl;
demo.Insert(2,10);
cout << "增加后的信息:" << endl;
cout << demo.Locate(15)<<endl;
cout << demo.Get(5) << endl;
demo.PrintList();
return 0;

}






原创粉丝点击