实验一 线性表

实验题10:求两个多项式的相加运算
编写一个程序,用单链表存储一元多项式,并实现两个多项式的相加运算。

#include "malloc.h"
#include "iostream"
#define MaxSize 10
using namespace std;

typedef struct
{
	float coef[MaxSize];
	int length;
}SqList;

void create(SqList *&L,float a[],int exp)
{
	int i=0;
	L=(SqList*)malloc(sizeof(SqList));
	for(i=0;i<=exp;i++)
	{
		L->coef[i]=a[i];
	}
	L->length=exp+1;
}

void DispList(SqList *&L)
{ 
	for(int i=L->length-1;i>0;i--)
	{
		cout<<L->coef[i]<<"x^"<<i<<"+";
	}
	cout<<L->coef[0];
	cout<<endl;
}

void add(SqList *&L,SqList*&M)
{
	if(L->length>M->length)
	{
		for(int i=0;i<M->length;i++)
	    {
	    	L->coef[i]=L->coef[i]+M->coef[i];
    	}
	}
	else
	{
		for(int i=0;i<L->length;i++)
	    {
	    	L->coef[i]=L->coef[i]+M->coef[i];
    	}
    	for(int i=L->length;i<M->length;i++)
    	{
	    	L->coef[i]=M->coef[i];
	    }
	    L->length=M->length;
	}
}

int main()
{
	SqList *p;
	SqList *q; 
	int exp1,exp2;
	float a[10],b[10];
	cout<<"请输入多项式1的最高项指数:";
	cin>>exp1;
	for(int i=0;i<=exp1;i++)
	{
		cout<<"请输入x^"<<i<<"的系数:";
		cin>>a[i];
	}
	create(p,a,exp1);
	cout<<"请输入多项式2的最高项指数:";
	cin>>exp2;
	for(int i=0;i<=exp2;i++)
	{
		cout<<"请输入x^"<<i<<"的系数:";
		cin>>b[i];
	}
	create(q,b,exp2);
	
	cout<<"多项式1:";
	DispList(p);
	cout<<"多项式2:";
	DispList(q); 
	add(p,q);
	cout<<"相加后:"; 
	DispList(p);
	
}

实验题11:职工信息的综合运算
设有一个职工文件,每个职工记录包含职工编号、姓名、部门号和工资数等信息,设计一个程序完成以下功能:
(1)输入一个职工记录。
(2)显示所有职工记录。
(3)按编号对所有职工记录进行递增排序。
(4)按部门号对所有职工记录进行递增排序。
(5)按工资数对所有职工记录进行递增排序。
(6)删除指定职工号的职工记录。
(7)删除职工文件中的全部记录。

#include "malloc.h"
#include "iostream"
#include <string>
#include <iomanip>
using namespace std;

struct Data
{
	int no;
	string name;
	int depno;
	float salary;
};

typedef struct LNode
{
	Data data;
	struct LNode *next;
}LinkNode;

void Create(LinkNode *&L)
{
	L=(LinkNode*)malloc(sizeof(LinkNode));
	L->next=NULL;
}

void AddOne(LinkNode *&L,Data data1)//输入一个职工记录
{
	LinkNode *s;
	s=(LinkNode*)malloc(sizeof(LinkNode));
	s->data=data1;
	s->next=L->next;
	L->next=s;
}

void DispList(LinkNode *&L)//显示所有职工记录
{
	LinkNode *p=L->next;
	if(p==NULL)
	{
		cout<<"无职工记录!"<<endl;
	}
	else
	{
		cout<<"职工编号:"<<setw(8)<<"姓名:"<<setw(10)<<"部门号:"<<setw(10)<<"工资数:"<<endl; 
		while(p!=NULL)
	    {
	    	cout<<p->data.no<<"     "<<p->data.name<<setw(10)<<p->data.depno<<setw(10)<<p->data.salary<<endl;
	    	p=p->next;
    	}
	}
	
}

void Nosort(LinkNode *&L)//按编号进行递增排序
{
	LinkNode *p,*pre,*q;
	p=L->next->next;
	L->next->next=NULL;
	while(p!=NULL)
	{
		q=p->next;
		pre=L;
		while(pre->next!=NULL&&pre->next->data.no<p->data.no)
		{
			pre=pre->next;
		}
		p->next=pre->next;
		pre->next=p;
		p=q;
	}
}

void Depnosort(LinkNode *&L)//按部门号进行递增排序
{
	LinkNode *p,*pre,*q;
	p=L->next->next;
	L->next->next=NULL;
	while(p!=NULL)
	{
		q=p->next;
		pre=L;
		while(pre->next!=NULL&&pre->next->data.depno<p->data.depno)
		{
			pre=pre->next;
		}
		p->next=pre->next;
		pre->next=p;
		p=q;
	}
}

void Salarysort(LinkNode *&L)//按工资数进行递增排序
{
	LinkNode *p,*pre,*q;
	p=L->next->next;
	L->next->next=NULL;
	while(p!=NULL)
	{
		q=p->next;
		pre=L;
		while(pre->next!=NULL&&pre->next->data.salary<p->data.salary)
		{
			pre=pre->next;
		}
		p->next=pre->next;
		pre->next=p;
		p=q;
	}
}

void Delete1(LinkNode *&L,int deleteno)//删除一个职工记录
{
	int i=1;
	LinkNode *p=L,*q=L->next;
	
	while(q!=NULL&&q->data.no!=deleteno)
	{
		p=q;
		q=q->next;
		i++;
	}
	if(p==NULL)
	{
		cout<<"该职工未记录!"<<endl; 
	}
	else
	{
		p->next=q->next;
		free(q);
		cout<<"删除成功!"<<endl; 
	}
}

void DeleteAll(LinkNode *&L)//删除全部记录
{
	LinkNode*pre=L,*p=L->next;
	while(p!=NULL)
	{
		free(pre);
		pre=p;
		p=pre->next;
	}
	cout<<"删除成功!"<<endl; 
}


int main()
{
	int choose,deleteno;
	Data data1;
	LinkNode *emp;
	Create(emp);
	while(1)
	{
		cout<<"请输入序号进行操作:"<<endl;
		cout<<"1.输入一个职工记录"<<endl;
		cout<<"2.显示所有职工记录"<<endl; 
		cout<<"3.按编号进行递增排序"<<endl;
		cout<<"4.按部门号进行递增排序"<<endl;
		cout<<"5.按工资数进行递增排序"<<endl;
		cout<<"6.删除一个职工记录"<<endl;
		cout<<"7.删除全部记录"<<endl;
		cin>>choose;
		if(choose==1)
		{
			cout<<"请输入该职工信息:"<<endl;
			cout<<"职工编号:"<<endl;
			cin>>data1.no;
			cout<<"姓名:"<<endl;
			cin>>data1.name;
			cout<<"部门号:"<<endl;
			cin>>data1.depno;
			cout<<"工资数:"<<endl;
			cin>>data1.salary;
			AddOne(emp,data1);
		}
		else if(choose==2)
		{
			DispList(emp);
		}

		else if(choose==3)
		{
			Nosort(emp);
			DispList(emp);
		}
		else if(choose==4)
		{
			Depnosort(emp);
			DispList(emp);
		}
		else if(choose==5)
		{
			Salarysort(emp);
			DispList(emp);
		}
		else if(choose==6)
		{
			cout<<"请输入要删除的职工号:";
			cin>>deleteno;
			Delete1(emp,deleteno);
		}
		else if(choose==7)
		{
			DeleteAll(emp);
			Create(emp);
		}
		else
		{
			cout<<"格式有误,请重新输入!"; 
		}
		cout<<endl;
	}
	return 0;
} 

仅作留档。

发布了30 篇原创文章 · 获赞 12 · 访问量 882

猜你喜欢

转载自blog.csdn.net/weixin_43893854/article/details/104326102