问题描述
给出初始数据,实现单链表的定义、创建、输出。
算法
单链表结点的存储结构包含两部分:数据、下一结点指针。
单链表的创建:输入n个数据e,若数据e不在单链表中,为数据e分配结点,并插入在单链表的尾部;若单链表中已有数据e,则不做任何操作。
单链表的输出:从头至尾遍历单链表,输出每个结点的元素值。
注:程序不可定义任何数组,否则不计成绩。
要求:查找定义子函数:int Find(Node *H,int e) //找到e返回1,找不到返回0。其中Node为链表结点结构体名,H为链表头指针。
输入要求
第一行:测试次数t
对每组测试数据,格式如下:
数据个数n 数据1 数据2 数据3 … 数据n
输出要求
对每组测试数据,输出链表中元素个数和单链表中的全部数据。
输入示例:(直接copy到cmd就可以了)
2
5 2 3 5 7 3
6 1 2 10 0 1 5
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
//链表节点(结构体实现)
struct Node
{
int e;
Node *next;
Node()
{
e = 0;
next = NULL;
}
};
class createList
{
int num;
Node* head;
public:
createList(){
head=new Node;
num=0;
}
~createList(){
Node *p,*p2;
for(int i=0;i<num;i++){
p=head;
while(p->next){
p2=p;
p=p->next;
}
// cout<<"yep"<<endl;
p2->next=NULL;
delete p;
}
// cout<<"end"<<endl;
delete head;
}
void test(int n){
int i;
int a;
for(i=0;i<n;i++){
cin>>a;
Node* tag=Find(a);
if(tag!=NULL){
tag->next=new Node;
tag->next->e=a;
num++;
}
}
pri();
}
Node* Find(int b){
Node *p = head;
while(p->next)
{
if(p->next->e==b)
return NULL;
else
p=p->next;
}
return p;
}
void pri()
{
if(num==0) {cout<<num<<endl; return ;}
Node *p = head->next;
if(p->next==NULL) cout<<num<<" "<<p->e<<endl;
else {
cout<<num<<" ";
while(p->next){
cout<<p->e<<" ";
p=p->next;
}
}
cout<<p->e<<endl;
}
};
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin>>n; //num
createList a;
a.test(n);
}
return 0;
}
/*输入示例:(直接copy到cmd就可以了)
2
5 2 3 5 7 3
6 1 2 10 0 1 5
*/