欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

list.cpp

数据结构
CPP
字号:
#include<iostream.h>
#include<string.h>

///////构造结构体////////////////////////////////////////////////////////////
struct student
{
	int number;
	char name[10];
	int yuwen;
	int shuxue;
	int yingyu;
};


struct list
{
	student xx;
	list * next;
};

////////函数声明//////////////////////////////////////////////////////

void Create(list * & head);
void Find(list * & head);
void Remend(list * & head);
void Del(list * & head);
void Add(list * & head);
void Avg(list * & head);
void Display(list *& head);
void Del_(list *& head);

//////////主函数//////////////////////////////////////////////////////////
void main()
{
	int a;
	list *l;
	while(1)
	{
		cout<<endl<<"退出程序请输入-------0\n创建链表请输入-------1\n查找请输入-----------2\n添加请输入-----------3\n删除请输入-----------4\n求全班平均输入-------5\n显示全班成绩输入-----6\n修改记录请输入-------7\n删除全部链表请输入---8\n"<<endl;
		cin>>a;
		cout<<endl;
		if(a==0)
			break;
		if(a==8)
		{
			Del_(l);
			break;
		}

		switch (a)
		{

		case 1:  Create(l);		break;									////输入成绩
		case 2:  Find(l);		break;									////查询成绩
		case 3:  Add(l);		break;									////添加成绩
		case 4:  Del(l);		break;									////删除成绩
		case 5:  Avg(l);		break;									////求平均成绩
		case 6:  Display(l);	break;									////显示所有成绩
		case 7:	 Remend(l);break;
		default:  cout<<"错误!"<<endl<<endl;
		}
	}
	cout<<"程序结束!"<<endl;
}

//////////创建////////////////////////////////////////////////////
void Create(list * & head)
{
	int i=0;

	list * New;
	list * n;
	char a[10];
	char qq;
	  while(1)
	  {
		  i++;

		New=new list;
		if(New==NULL)
			cout<<"没有申请到空间!"<<endl;
		else
		{
			cout<<"创建第 "<< i<<" 个记录"<<endl;
			cout<<"输入学号:";
			cin>>New->xx.number ;
			cout<<"输入名字:";
			cin>>a;
			strcpy(New->xx .name ,a);
			cout<<"输入数学成绩:";
			cin>>New->xx .shuxue ;
			cout<<"输入英语成绩:";
			cin>>New->xx .yingyu ;
			cout<<"输入语文成绩:";
			cin>>New->xx .yuwen ;
			cout<<endl<<endl;
			New->next =NULL;

			if(i==1)
			{
				head=New;
				n=head;
			}
			else
			{
				n->next=New;
				n=New;
			}


			cout<<"是否退出创建  Y/N :    ";
			cin>>qq;
			if(qq=='Y'  || qq=='y')	
			{
				cout<<endl<<endl;
				break;
			}
			else
				continue;
		}
	  }
}



/////////查找///////////////////////////////////////////////////////////
		

void Find(list * & head)
{
	int a;
	list *n;
	cout<<"请输入要查找的学生学号:"<<endl;
	cin>>a;
	n=head;
	 while(1)
	{
		if(n->xx .number==a)	
		{
			cout<<endl;
			cout<<"学生:"<<n->xx .name <<endl;
			cout<<"数学:"<<n->xx .shuxue <<endl;
			cout<<"英语:"<<n->xx .yingyu <<endl;
			cout<<"语文:"<<n->xx .yuwen <<endl;
			cout<<"三科平均:"<<(n->xx .shuxue +n->xx .yingyu +n->xx .yuwen )/3<<endl<<endl;
			break;
		}
		else
			n=n->next ;

		if(n->next ==NULL && n->xx.number!=a)
		{
			cout<<"抱歉,没有找到你输入的学号!"<<endl;
			break;
		}

	}


}

///////////修改///////////////////////////////////////////////////////////

void Remend(list * & head)
{
	
	int a;
	list *n;
	cout<<"请输入要修改的学生学号:"<<endl;
	cin>>a;
	cout<<endl;
	n=head;
	do
	{
		if(n->xx .number==a)	
		{
			cout<<"原姓名:"<<n->xx .name<<endl<<"名字改为:";
			cin>>n->xx .name;
			cout<<"原数学成绩:"<<n->xx .shuxue<<endl<<"数学改为:";
			cin>>n->xx .shuxue ;
			cout<<"原英语成绩:"<<n->xx .yingyu<<endl<<"英语改为:";
			cin>>n->xx .yingyu ;
			cout<<"原语文成绩:"<<n->xx .yuwen<<endl<<"语文改为:";
			cin>>n->xx .yuwen ;
			cout<<endl;
			break;
		}
		else
			n=n->next ;
		if(n->next ==NULL && n->xx.number!=a)
		{
			cout<<"抱歉,没有找到你输入的学号!"<<endl<<endl;
			break;
		}

	} while(1);

}
//////////删除/////////////////////////////////////////////////////////////////
void Del(list * & head)
{
	
	int a;
	list *n;
	list *p,*r;
	cout<<"请输入要删除的学生学号:";
	cin>>a;
	cout<<endl;
	n=head;
	p=n;
	do
	{
		if(n->xx .number ==0)
			cout<<"你还没有创建链表,没法删除!"<<endl;
		else
		{
			if(p->xx .number==a)				
			{
				if(p==head)
				{
					r=p;
					p=p->next ;
					delete r;
					head=p;
					break;
				}
				else
				{
					r->next =p->next ;
					delete p;
					break;
				}

			}
			else
			{
				r=p;
				p=p->next ;
			}
		}
		if(n->next==NULL && n->xx.number!=a)
		{
			cout<<"抱歉,没有找到你输入的学号!"<<endl;
			break;

		}


	} while(1);


}
/////////添加///////////////////////////////////////////////////////
void Add(list * & head)
{
	list *p;
	list *n;
	p=head;
	while(p->next !=NULL)
	{
		p=p->next ;
	}


	n=new list;
	if(n==NULL)
		cout<<"没有分到内存空间!"<<endl<<endl;
	else
	{
			cout<<"请输入\n学号:"<<endl;
			cin>>n->xx.number;
			cout<<"学生:";
			cin>>n->xx .name;
			cout<<"数学:";
			cin>>n->xx .shuxue ;
			cout<<"英语:";
			cin>>n->xx .yingyu ;
			cout<<"语文:";
			cin>>n->xx .yuwen ;
			n->next =NULL;
			cout<<endl<<endl;
	}
	p->next =n;



}


/////////求平均///////////////////////////////////////////////////////////
void Avg(list * & head)
{
	int sh=0,yi=0,yu=0,k=0;
	list *n;
	n=head;
	while(n->next !=NULL)
	{
			sh +=n->xx.shuxue;
			yi +=n->xx.yingyu;
			yu +=n->xx.yuwen;
			n=n->next ;
			++k;
	}
	if(k==0)
		cout<<"对不起,链表不存在!"<<endl;
	else
	{
			cout<<"数学平均分:"<<sh/k <<endl;
			cout<<"英语平均分:"<<yi/k<<endl;
			cout<<"语文平均分:"<<yu/k<<endl;
			cout<<"全班平均分:"<<(sh+yi+yu)/k<<endl<<endl;
	}
}

/////////显示//////////////////////////////////////////////////////////////
void Display(list * & head)
{
	list * n;
	n=head;
	int i=0;

	do
	{
			cout<<"学号:"<<n->xx.number<<endl;
			cout<<"学生:"<<n->xx .name<<endl;
			cout<<"数学:"<<n->xx .shuxue<<endl ;
			cout<<"英语:"<<n->xx .yingyu<<endl ;
			cout<<"语文:"<<n->xx .yuwen<<endl ;
			cout<<endl<<"------------------"<<endl<<endl;
			n=n->next ;
			i++;
	}while(n->next !=NULL);

			cout<<"学号:"<<n->xx.number<<endl;
			cout<<"学生:"<<n->xx .name<<endl;
			cout<<"数学:"<<n->xx .shuxue<<endl ;
			cout<<"英语:"<<n->xx .yingyu<<endl ;
			cout<<"语文:"<<n->xx .yuwen<<endl ;
			cout<<endl<<"------------------"<<endl<<endl;

	cout<<"共 "<<i+1<<" 名学生"<<endl<<endl;

}

void Del_(list * & head)
{
	list *p,*r;
	p=head;
	while(p->next!=NULL)
	{

		r=p;
		p=p->next;
		delete r;
	}
}

⌨️ 快捷键说明

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