c++模板链表实现

来源:互联网 发布:iso7816协议 c语言 编辑:程序博客网 时间:2024/06/05 15:49

简介:主要是利用模板实现链表的操作。模板的使用,使得程序的开发量大大地减少。

可以先定义一个链表LinkList,之后可以定义自己的类了(例如:Student类),使用时就可以这样调用了

LinkList<Student>  L;

下面便是链表的实现:

LinkList.cpp

template<class Type>struct Node{Type data;struct Node *next;};template<class Type>class LinkList{private:Node<Type> *head;//头指针public:LinkList();int InsertLinkList();Node<Type> *GetLinkList(int pos);int DelLinkList(int pos);void PrintLinkList();~LinkList();};//创建链表template<class Type>LinkList<Type>::LinkList(){head = new Node<Type>;head->next = NULL;}//链表插入 头插入template<class Type>int LinkList<Type>::InsertLinkList(){Node<Type> *insertElement = new Node<Type>;insertElement->data.Input();//插入结点数据的输入insertElement->next = head->next;head->next = insertElement;return 1;}//取链表结点template<class Type>Node<Type>* LinkList<Type>::GetLinkList(int pos){Node<Type> *p = head;int point = 0;while ((p != NULL) && (point < pos)){p = p->next;point++;}return point == pos ? p : NULL;}//打印链表结点template<class Type>void LinkList<Type>::PrintLinkList(){Node<Type> *p;p = head->next;if (p == NULL)cout << "表空!" << endl;while (p){//cout << p->data <<setw(2);p->data.Print();p = p->next;}cout << endl;}//删除链表结点template<class Type>int LinkList<Type>::DelLinkList(int pos){Node<Type> *p, *delElememt;int point = 1;p = GetLinkList(pos - 1);if (p == NULL){cout << "position error!" << endl;return -1;}else if (p->next == NULL){cout << "this position is not exist" << endl;return -1;}else{delElememt = p->next;p->next = delElememt->next;delete delElememt;return 1;}}template<class Type>LinkList<Type>::~LinkList(){Node<Type> *p, *cur;cur = head->next;while (1){if (cur == NULL)break;else{p = cur;cur = cur->next;delete p;p = NULL;}}delete head;head = NULL;}
student.cpp
class Stu{private:char *name;int id;public:Stu();Stu(char *na, int ID);~Stu();void Input();void Print();};#if 1Stu::Stu(){name = NULL;}Stu::Stu(char *na, int ID){name = new char[strlen(na) + 1];strcpy(name, na);id = ID;}Stu::~Stu(){delete[]name;}void Stu::Input(){cout << "please input name and ID of student" << endl;name = new char[20];cin >> name >> id;}void Stu::Print(){cout << "student:" << id << " name: " << name << endl;}#endif
void menu(){cout << "********************" << endl;cout << "1---------------插入" << endl;cout << "2---------------删除" << endl;cout << "3---------------显示" << endl;cout << "0---------------退出" << endl;cout << "********************" << endl;cout << "请选择" << endl;}int main(void){LinkList<Stu> L; //例如,就像这样来调用int choice;int m = 1;while (m){menu();cin >> choice;switch (choice){case 1:{  int ret = L.InsertLinkList();  if (ret == 1)  {  cout << "insert successful!" << endl;  }  else  {  cout << "insert failure!" << endl;  }  break;}case 2:{  int pos;  cout << "请输入要删除的位置!" << endl;  cin >> pos;  if (L.DelLinkList(pos) == 1)  {  cout << "delete successful!" << endl;  }  else  {  cout << "delete failure!" << endl;  }  break;}case 3:{  cout << "信息:" << endl;  L.PrintLinkList();  break;}case 0:{  m = 0;  break;}default:{   cout << "输入错误,请重新输入!" << endl;   break;}}}system("pause");return 0;}
当真正使用的时候,只需要定义自己的类及其成员函数的实现,然后调用就ok了,很方便吧!

1 0