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
- [C++] 模板类实现简单链表
- <C/C++数据结构>双向链表(C++模板实现)
- 【C++】模板实现带头节点的双向循环链表
- [数据结构]链表的实现(c++/类模板)
- C 链表模板
- c++(模板类)实现顺序表
- 【C++】用模板实现顺序表
- 【C++】用模板实现顺序表Vector
- C语言实现stack模板
- C语言实现函数模板
- [c++]栈模板的实现
- c++::用模板实现List
- 【c++】模板实现动态Vector
- 链表的模板实现
- 链表的模板实现
- 类模板 实现链表
- //链表的模板实现
- 类模板 实现链表
- 科大讯飞视频检测并验证
- 文件的进程线程锁
- 作业
- [PHP实例] 一个PHP缓存类
- android学习——The method replace(int, Fragment) in the type FragmentTransaction is not applicable for t
- c++模板链表实现
- 排序了
- redis 使用
- Kmeans聚类过程的动态可视化
- Glide 入门到精通之十九——动态使用 Model Loader
- python学习(四):函数式编程
- http与https的区别
- iOS block传值的用法
- Exception_android_导入项目感叹号异常