C++ 单链表基本操作

来源:互联网 发布:windows10切换苹果mac 编辑:程序博客网 时间:2024/06/07 15:57
#include <iostream>using namespace std;template <typename DataType>class LinkList{    struct Node    {        DataType data;        Node * next;    };    private:        Node * first;    public:        LinkList();        ~LinkList(){}        DataType Delete(int i);        void Insert(int i, DataType);        int Locate(DataType x);//按值查找        DataType Get(int i);//按位查找        int Length();        void PrintLinkList();};template <typename DataType>LinkList <DataType>::LinkList(){    first = new Node;    first->next = NULL;}template <typename DataType>DataType LinkList <DataType>::Delete(int i){    Node * p = first;    int counter = 0;    DataType x;    while(p && counter < i)    {        p = p->next;        counter++;    }    if(!p && !(p->next))        throw "位置";    else    {        Node * q = p->next;        x = q->data;        p->next = q->next;        delete q;        return x;    }}template <typename DataType>void LinkList <DataType>::Insert(int i, DataType x){    Node * p = first;    int counter = 0;    while(p && counter < i)    {        p = p->next;        counter++;    }    if( !p )        throw "位置";    else    {        Node * temp = new Node;        temp->data = x;        temp->next = p->next;        p->next = temp;    }}template <typename DataType>int LinkList <DataType>::Locate(DataType x)//按值查找,返回序号{    Node * p = first->next;    int counter = 0;    while( p )    {        if( p->data == x)            return counter;        else        {            counter++;            p = p->next;        }    }    cout<<"在该链表中找不到相应的值!"<<'\t';    return 0;}template <typename DataType>DataType LinkList <DataType>::Get(int i)//按位查找,返回值{    Node * p = first->next;    int counter = 0;    while( p && counter < i)    {            counter++;            p = p->next;    }    if(!p)        throw "位置";    else        return p->data;}template <typename DataType>int LinkList <DataType>::Length(){    Node * p = first->next;    int counter = 0;    while( p )    {            counter++;            p = p->next;    }    return counter;}template <typename DataType>void LinkList <DataType>::PrintLinkList(){    Node * p = first->next;    while( p )    {            cout<<p->data<<'\t';            p = p->next;    }    cout<<endl;}int main(){    LinkList <int> ll;    cout<<"插入前链表的长度为:   "<<ll.Length()<<endl;    cout<<"Insert:"<<endl;    ll.Insert(0,1);    ll.Insert(1,2);    ll.Insert(2,3);    ll.Insert(3,4);    ll.Insert(4,5);    cout<<"插入后链表的长度为:   "<<ll.Length()<<endl;    cout<<"遍历输出链表:  "<<endl;    ll.PrintLinkList();    cout<<"Delete:"<<endl;    ll.Delete(2);    cout<<"删除后遍历输出链表:  "<<endl;    ll.PrintLinkList();    cout<<"查找值为4的元素序号:  "<<endl;    cout<<ll.Locate(4)<<endl;    cout<<"查找值为6的元素序号:  "<<endl;    cout<<ll.Locate(6)<<endl;    cout<<"查找序号为4的元素值:  "<<endl;    cout<<ll.Get(3)<<endl;}