C++类和对象的应用实例——链表
来源:互联网 发布:三菱plc仿真软件汉化 编辑:程序博客网 时间:2024/04/30 02:33
实例:
以单向链表为例。建一个链表项作为一个类,名为Item,包含了数据项data和指针*next,指针用来指向下一个链表项。为了简便,它只有一个数据项用来存放数据。 再建立一个操作类,名为List,包含如下操作: (1)显示输出一个已生成的链表; (2)对一个空表插入链表项,插入的新表项放在表头; (3)对一个空表追加链表项,追加的新表项放在表尾; (4)两个链表的连接,即把一个链表接再另一个链表的后面; (5)将一个链表的各链表项逆向输出; (6)求得一个链表的数据项数。 把List类作为Item类的友元类,List类的对象有权创建和操作Item类的对象。代码如下:
#include<iostream>using namespace std;class List;class Item {public: friend class List;private: Item(int d = 0) { data = d; next = 0; } //对象初始化 Item *next; int data;};class List {public: List() { list = 0; } List(int d) { list = new Item(d); } int print(); //(1) int insert(int d = 0); //(2) int append(int d = 0); //(3) void cat(List &il); //(4) void reverse(); //(5) int length(); //(6)private: Item *end(); Item *list;};int List::print(){ if (list == 0) { //空链表输出empty cout << "empty\n"; return 0; } cout << "("; int cnt = 0; //计数菌 Item *pt = list; while (pt) { if (++cnt % 40 == 1 && cnt != 1) //40个一行 cout << endl; cout << pt->data << " "; //输出当前项 pt = pt->next; //指针移动,指向下一项 } cout << ")\n"; return cnt;}int List::insert(int d){ Item *pt = new Item(d); //创建新的数据项 pt->next = list; //使当前对象的next指针指向下一对象 list = pt; //使临时指针list指向当前对象 return d;}Item * List::end() //for循环将指针移动到了链表尾部{ Item *prv, *pt; for (prv = pt = list; pt; prv = pt, pt = pt->next); return prv; //prv指向链表的末项,该项的next指针值为0}int List::append(int d){ Item *pt = new Item(d); if (list == 0) list = pt; else (end())->next = pt; //令值为0的next指针指向新项 return d;}void List::cat(List & il){ Item *pt = il.list; //pt指向链表il的头部 while (pt) { append(pt->data); //从链表il头依次将项接到当前链表尾 pt = pt->next; }}void List::reverse(){ Item *pt, *prv, *tmp; prv = 0; pt = list; //pt指向链表头(第一项) list = end(); while (pt != list) { //第一次循环 tmp = pt->next; //第二项指针值备份 pt->next = prv; //链表头指针值改为prv(初始为0) prv = pt; //prv存放当前指针值 pt = tmp; //pt指向第二项 } list->next = prv;}int List::length(){ int cnt = 0; //计数菌 Item *pt = list; for (; pt; pt = pt->next, cnt++); return cnt;}void main(){ List list1; list1.print(); for (int i = 10; i < 18; i++) list1.insert(i); cout << "list1: "; list1.print(); List list2; for (int i = 15; i < 20; i++) list2.append(i); cout << "list2: "; list2.print(); cout << "list1 length: " << list1.length() << endl; list2.cat(list1); cout << "list2: "; list2.pr``nt(); list2.reverse(); cout << "list2: "; list2.print(); cout << "list2 length: " << list2.length() << endl;}
输出如下:
emptylist1: (17 16 15 14 13 12 11 10 )list2: (15 16 17 18 19 )list1 length: 8list2: (15 16 17 18 19 17 16 15 14 13 12 11 10 )list2: (10 11 12 13 14 15 16 17 19 18 17 16 15 )list2 length: 13请按任意键继续. . .
1 0
- C++类和对象的应用实例——链表
- C++primer初学者:对象和类的小应用
- clipboardData 对象的应用实例
- 对象和类的应用
- 初理解Objective-C的 类、实例、实例化、对象
- Objective-C 学习笔记 04 - 继承和对象的实例
- c#中的委托和事件的简单实例_c#应用
- 类和对象:Objective-C概述、面向对象编程、类和对象、实例变量操作
- 函数对象和stl算法应用实例
- Objective-C 面向对象, 实例方法和类方法
- 类方法和实例方法的应用提高开发效率以及易读性 objective-c
- 类、对象和实例
- virtio-scsi的类,对象和实例
- 对象类的创建和实例化
- c++关于类和对象的实例
- Java类、对象和实例的理解
- 对象和对象的应用
- Objective-C面向对象-Objective-C 对象,实例和方法
- [从头学数学] 第103节 整理与复习--数与代数
- 匿名内部类
- 【SPOJ-NAGAY】Joseph’s Problem【余数求和】【分块】
- 在Eclipse中创建Maven多模块工程的例子
- Wordpress 网站搭建及性能监控方法详解!
- C++类和对象的应用实例——链表
- java将集合转换为数组(二维数组)
- 进程同步,条件变量,pthread_cond_wait,pthread_cond_init,PTHREAD_COND_INITIALIZER
- Ubuntu登陆windows搭建的FTP服务器文件名乱码解决方法
- 关于如果自己一个人负责测试一个app的思考
- Palindrome Number
- PAT--1084 Broken Keyboard
- collectionview resueview 重影的问题
- xib 自定义cell高度