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;}