建立专门的链表类处理有关动态链表的操作 扩展二
来源:互联网 发布:淘宝客推广大师手机版 编辑:程序博客网 时间:2024/05/16 19:45
#include<iostream>using namespace std;template <class TT,class PP>class Student //结点类{public: Student(TT n,PP s){num=n;score=s;next=NULL;} ~Student(){}; Student *next; //指向下一个结点 TT num; PP score;};class MyList //链表类{public: MyList(){head=NULL;} MyList(int n,double s); //以Student(n,s)作为单结点的链表 ~MyList(); int display(); //输出链表,返回值为链表中的结点数 void insert(int n,double s); //插入一系列结点:将Student(n,s)结点插入链表,该结点作为第一个结点 void append(int n,double s); //追加:将Student(n,s)结点插入链表,该结点作为最后一个结点 void cat(MyList &il); //将链表il连接到当前对象的后面 int length(); //返回链表中的结点数private: Student<int,double> *head; //链表的头结点};//以下为类成员函数的定义MyList::MyList(int n,double s){ head=new Student<int,double>(n,s);}MyList::~MyList(){ while(head!=NULL) { Student<int,double> *p=head; head=head->next; delete p; } head=NULL;}int MyList::display(){ int i=0; Student<int,double> *head1=head; while(head1!=NULL) { cout<<"num:"<<head1->num<<"\t"<<"score:"<<head1->score<<endl; head1=head1->next; ++i; } head1=NULL; return i;}void MyList::insert (int n,double s)//熟练运用点的两种顺序插入{ Student<int,double> *pt=new Student<int,double>(n,s); pt->next=head; head=pt;}void MyList::append(int n,double s)//关键点在于如何遍历到最后一点{ Student<int,double> *head2=head; if(head==NULL)head=new Student<int,double>(n,s); else { while(head2->next!=NULL)head2=head2->next; head2->next=new Student<int,double>(n,s); }// head2->next->num=n;//之前的错误写法,没有分配空间就赋值// head2->next->score=s;// head2->next->next=NULL;}//void MyList::cat(MyList &il)//错误在于将一个链表直接附加到另外的链表后,导致析构时附加的链表被析构两次//{ //在函数尾部将附加的链表头置为NULL,就不会出错// //但是这样貌似也不是很好// Student *pt=head;// while(pt->next!=NULL)pt=pt->next;// pt->next=il.head;// il.head=NULL;//}void MyList::cat(MyList& il){ Student<int,double> *pt=il.head; while(pt) { append(pt->num,pt->score); pt=pt->next; }}int MyList::length(){ int i=0; Student<int,double> *head1=head; while(head1!=NULL) { head1=head1->next; ++i; } head1=NULL; return i;}//测试函数int main(){ int n; double s; MyList head1; cout<<"input head1: "<<endl; //输入head1链表 for(int i=0;i<2;i++) { cin>>n>>s; head1.insert(n,s); //通过“插入”的方式 } cout<<"head1: "<<endl; //输出head1 head1.display(); MyList head2(1001,98.4); //建立head2链表 head2.append(1002,73.5); //通过“追加”的方式增加结点 head2.append(1003,92.8); head2.append(1004,99.7); cout<<"head2: "<<endl; //输出head2 head2.display(); head2.cat(head1); //把head1追加到head2后面 cout<<"length of head2 after cat: "<<head2.length()<<endl; cout<<"head2 after cat: "<<endl; //显示追加后的结果 head2.display(); return 0;}
0 0
- 建立专门的链表类处理有关动态链表的操作 扩展二
- 《第十四周任务二》建立专门的链表类处理有关动态链表的操作
- 第十四周实验--任务2--建立专门的链表类处理有关动态链表的操作
- C++第十四周【任务2】建立专门的链表类处理有关动态链表的操作
- 建立专门的链表类处理有关动态链表的操作
- 第十四周实验--任务2--建立专门的链表类处理有关动态链表的操作(升级版)
- 《C++第十四周实验报告2-1》---建立专门的链表类处理有关动态链表的操作
- 第14周任务2(建立专门的链表类处理有关动态链表的操作)
- 第十五周上机任务项目2-建立专门的链表类处理有关动态链表的操作
- 第十四周任务二(建立专门链表类处理有关动态链表)
- 建立专门的数组类处理有关数组的操作+扩展1
- 第十四周实验--任务1--建立专门的数组类处理有关数组的操作
- 第十四周任务1建立专门的数组类处理有关数组的操作
- 第十四周 任务一 建立专门的数组类处理有关数组的操作
- C++第十四周【任务1】 建立专门的数组类处理有关数组的操作
- 第14周任务1(建立专门的数组类处理有关数组的操作)
- 《第十四周任务一》建立专门的数组类处理有关数组的操作
- 第十五周上机任务项目1-建立专门的数组类处理有关数组的操作
- centos 下 Qt Creator 的安装使用
- 浪漫爱
- 守望者的逃离
- ExtJs 备忘录(2)—— Form表单(二) [ 控件封装 ]
- CentOS6.4 安装oracle11g的遇到的问题以及解决方法
- 建立专门的链表类处理有关动态链表的操作 扩展二
- 【排序】快速排序C++实现总结
- hdu 1754 线段树入门
- 30 个 jQuery & CSS3 加载动画和进度栏插件
- ExtJs 备忘录(3)—— Form表单(三) [ 数据验证 ]
- 今夜无眠,思念泛滥成灾
- 分数求和
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- VBA语法