⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 链表
💻 CPP
字号:
#include <iostream.h>
class MyList
{
public:
	int data;
	MyList *next;
	MyList (int n,MyList *p=0) 
	{
		data=n;next=p;
	}
};

class LinkList{
private:
	MyList *head;
public:
	LinkList()
	{
		head=0;
	}
	void Create();
	void Print();
	void compositor();   
	void Delete();
	void Insert();
    void Combine(LinkList );
	void Average();
};

void LinkList::Create()
{
	int i,x,n;
	MyList *p,*p1;
	head=0;
	cout<<"输入个数:";
	cin>>n;
	cout<<"第1个:";
	cin>>x;
	head=p=new MyList(x);
	for (i=1;i<n;i++)
	{
		cout<<"第"<<i+1<<"个:";
		cin>>x;
		p1=new MyList(x);
		p->next=p1;
		p=p->next;
	}
	p->next=0;



}

void LinkList::Print()
{
	MyList *p=head;
	while (p!=0)
	{
		cout<<" "<<p->data;
		p=p->next;
	}
	cout<<endl;
}


void LinkList::Delete() 
{
    int x;
	int i=0;
	cout<<"请输入你要清除的那个数:";
	cin>>x;
	MyList *p=head,*p1=0,*p2=0;
	while ((p->data)==x)
	{   i=1;
		head=p->next;
		p=head;
	
	}
	p=head;
	if (p!=0) 
	{
	  while (p->next!=0)
	  {
		     if(p->next->data==x)
			 {      i=1;
					p1=p->next;
					p->next=p->next->next;
					delete p1;

			 }
		     else
				 p=p->next; 
	  } 
	}
	if(i==0)
	
		cout<<"没有你要清除的那个数."<<"此时链表为:"<<endl;
}


void LinkList::Insert()
{
	MyList *p,*p1;
	int x;
	cout<<"请输入需要插入的数:"<<endl;
	cin>>x;
	p=head;
	p1=new MyList(x); 
	if (p->data>x)
	{
		p1->next=head;
		head=p1;
	}
	else 
	{
		while (p->next!=0)
		{
			if (p->next->data>x)
			{
				p1->next=p->next;
				p->next=p1;
				break;
			}
			p=p->next;
		}
		if (p->next==0) {
			p->next=p1;
			p1->next=0;
		}
	}
}
void LinkList::Combine(LinkList link2)
{
	MyList *p1=head,*p2=link2.head;
	MyList *c=0;
	int k=0;
	while (p1!=0&&p2!=0){
		if (p1->data<p2->data){
			if (!k){
				c=head=p1;
				p1=p1->next;
			}
			else{
				c->next=p1;
				p1=p1->next;
				c=c->next;
			}
		}
		else {
			if (!k){
				c=head=p2;
				p2=p2->next;
			}
			else{
				c->next=p2;
				p2=p2->next;
				c=c->next;
			}
		}
		k=1;
	}
	if (p1==0){
		c->next=p2;
	}
	else {
		c->next=p1;
	}
}


void LinkList::compositor()
{   
	cout<<"请创建一个新链表:"<<endl;
	Create();
    int l,i=0;
	MyList *p=head;
	MyList *p1=head->next;
	while(p1!=0)
	{
	      if((p->data)>(p1->data))
		  {
			  i++;
		     l=p->data;
             p->data=p1->data;
             p1->data=l;
		  }
		  p=p->next;
		  p1=p1->next;
		  if(p1==0&&i!=0)
		  {
			  i=0;
			 p=head;
			 p1=p->next;
		  }
	}
	
}
void LinkList::Average()
{
	int i=0;
	int sum=0;
	int average;
	MyList *p=head;
	while(p!=0)
	{
		i++;
		sum=sum+p->data;
		p=p->next;
	}
	sum=sum+p->data;
	i++;
	average=sum/i;
	cout<<"平均数是:"<<endl;
}

int main () 
{
	LinkList l1,l2;
	int m;
	do
	{
		cout<<"1.创建链表"<<endl;
	    cout<<"2.打印"<<endl;
	    cout<<"3.删除"<<endl;
	    cout<<"4.在数列中插入一个数"<<endl;
	    cout<<"5.连接两个链表"<<endl;
		cout<<"6.从小到大排列"<<endl;
		cout<<"7.平均数是:"<<endl;
		cout<<"8.结束"<<endl;
		cout<<"请选择"<<endl;
		cin>>m;
		switch (m)
		{
		case 1:l1.Create();break;
		case 2:l1.Print();break;
		case 3:l1.Delete();l1.Print();break;
		case 4:l1.Insert();l1.Print();break;
		case 5:
			cout<<"输入第一个数列"<<endl;
			l1.Create();
			cout<<"输入第二个数列"<<endl;
			l2.Create();
			l1.Combine(l2);
		    l1.Print();
			break;
		case 6:l1.compositor();l1.Print();break;
		case 7:l1.Average();;l1.Print();break;
		}
	}
	while (m!=8);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -