类模板上机题

题目描述

1.设计如下样式的链表类模板list,并对其进行简单的使用:

template<class T> class list{
	struct node{
		T data;
		node *next;
	}*head,*tail;//结构体node用来定义链表表项
	static int num;//用于记录链表项数
public:
	list();//构造函数,创建空列表
	void Append(T item);//生成链表项附加到原链表的链尾
	int count();//返回当前链表的项数
	void htot();//把链表首项移到链尾
	void ttoh();//把链表尾项移到链首
	void display();//把链表各项数据data显示在屏幕上
};

2.主函数中:
分别实例化int型对象和char型对象,先输入int型对象和char型对象链表的长度,然后输入对应的链表项并使用Append方法构建链表。输出两个链表的长度,对int型链表调用一次htot()方法,对char型链表调用一次ttoh()方法后,并展示两个链表。
输入
int型链表长度 char型链表长度
int型链表各表项 char型链表各表项
输出
两链表长度
调换顺序后的两链表表项

输入样例1
5 2
1 2 4 5 6 2 b
输出样例1
5 2
2 4 5 6 1
b 2

输入样例2
1 1
2 r
输出样例2
1 1
2
r

输入样例3
4 6
1 2 8 9 a v d e 2 f
输出样例3
4 6
2 8 9 1
f a v d e 2

输入样例4
1 7
5 a f v v f w g

输出样例4
1 7
5
g a f v v f w

输入样例5
4 3
10 52 48 30 b n z
输出样例5
4 3
52 48 30 10
z b n

代码

诶,没想到老师给我pass掉了,因为上周出过链表的题了,所以贴出代码。

#include <iostream>
using namespace std;

template<class T> class list{
	struct node{
		T data;
		node *next;
	}*head,*tail;//结构体node用来定义链表表项
	static int num;//用于记录链表项数
public:
	list();//构造函数,创建空列表
	void Append(T item);//生成链表项附加到原链表的链尾
	int count();//返回当前链表的项数
	void htot();//把链表首项移到链尾
	void ttoh();//把链表尾项移到链首
	void display();//把链表各项数据data显示在屏幕上
};

template<class T> int list<T>::num=0;

template<class T> list<T>::list(){
	head=NULL;
	tail=NULL;
}

template<class T> void list<T>::Append(T item){
	node *p;
	p=new node;
	p->data=item;
	p->next=NULL;
	if(tail)tail->next=p;
	tail=p;
	if(head==NULL)head=tail;
	num++;
}

template<class T> int list<T>::count(){
	return num;
}

template<class T> void list<T>::htot(){
	tail->next=head;
	tail=head;
	head=head->next;
	tail->next=NULL;
}

template<class T> void list<T>::ttoh(){
	node *q, *p=head;
	q=p;
	while(p->next) {
		q=p;
		p=p->next;	
	}
	tail->next=head;
	head=tail;
	tail =q;
	tail->next=NULL;
}

template<class T> void list<T>::display(){
	node *p=head;
	while(p){
		cout<<p->data<<' ';
		p=p->next;
	}
	cout<<endl;
}

int main(){
	list<int> link1;
	list<char> link2;
	int link1_num,link2_num;
	cin>>link1_num>>link2_num;
	for(int i=0;i<link1_num;i++){
		int d;
		cin>>d;
		link1.Append(d);
	}
	for(int i=0;i<link2_num;i++){
		char d;
		cin>>d;
		link2.Append(d);
	}
	link1.htot();
	link2.ttoh();
	cout<<link1.count()<<" "<<link2.count()<<endl;
	link1.display();
	link2.display();
return 0;
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读