CreateList(list_own *&L,int n) 创建链表
print(list_own *L) 打印链表
List_insert(list_own *L,int i,int num) 链表插入,插入在i之后。
select(list_own *L,int i) 查找第i个元素
revise(list_own *L,int i,int num) 将第i个元素替换为
list_spot_delete(list_own *L,int i) 将链表中第i个节点删除
DestroyList(list_own* &L) 删除链表
ListEmpty(list_own* &L) 判断链表是否为空
ListLength(list_own* L) 返回链表长度
select_0(list_own *L,int num) 查找链表中是否含有某个节点的值
Connect(list_own *&L1,list_own *&L2) 将俩个链表连接在一起
Insert(list_own*&L,list_own*&num,int n) 将一个节点插入到链表中
#include<bits/stdc++.h>
using namespace std;
struct list_own
{
int num;
list_own *next;
};
void CreateList(list_own *&L,int n)
{
L=(list_own*)malloc(sizeof(list_own));
list_own* p1=(list_own*)malloc(sizeof(list_own));
L->next=NULL;
p1=L;
list_own* p;
for(int i=0;i<n;i++)
{
int tmp_num;
p=(list_own*)malloc(sizeof(list_own));
scanf("%d",&tmp_num);
p->num=tmp_num;
p->next=p1->next;
p1->next=p;
p1=p;
}
}
void print(list_own *L)
{
for(list_own* p_i=L->next;p_i!=NULL;p_i=p_i->next)
{
printf("%d ",p_i->num);
}
printf("\n");
}
void List_insert(list_own *L,int i,int num)
{
list_own *tmp_p=L->next;
int t=0;
if(i==0)
{
list_own*s=(list_own*)malloc(sizeof(list_own));
s->next=tmp_p;
L->next=s;
s->num=num;
return;
}
for(list_own* p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==i)
{
list_own*s=(list_own*)malloc(sizeof(list_own));
s->next=p_i->next;
s->num=num;
p_i->next=s;
break;
}
}
}
int select(list_own *L,int i)
{
list_own *tmp_p=L->next;
int t=0;
bool falg=false;
for(list_own* p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==i)
{
falg=true;
return p_i->num;
}
}
if(!falg)
{
printf("i>0&&i<=n");
return 0;
}
}
void revise(list_own *L,int i,int num)
{
list_own *tmp_p=L->next;
int t=0;
bool falg=false;
for(list_own *p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==i)
{
p_i->num=num;
falg=true;
return ;
}
}
if(!falg)
{
printf("i>0&&i<=n");
return ;
}
}
void list_spot_delete(list_own *L,int i)
{
list_own *tmp_p=L->next;
int t=0;
if(i==1)
{
L->next=(tmp_p->next);
free(tmp_p);
return ;
}
for(list_own *p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==(i-1))
{
list_own *q=p_i->next;
p_i->next=((p_i->next)->next);
q->next=NULL;
free(q);
return ;
}
}
}
void DestroyList(list_own* &L)
{
list_own* p;
while(L)
{
p=L->next;
free(L);
L=p;
}
printf("链表空间释放\n");
}
bool ListEmpty(list_own* &L)
{
if(L->next==NULL) return true;
else
{
return false;
}
}
int ListLength(list_own* L)
{
int ans=0;
for(list_own* p_i=L->next;p_i!=NULL;p_i=p_i->next)
{
ans++;
}
return ans;
}
void select_0(list_own *L,int num)
{
int t=0;
for(list_own* p_i=L->next;p_i!=NULL;p_i=p_i->next)
{
t++;
if(p_i->num==num)
{
printf("寻找成功,在%d位置",t);
return ;
}
}
printf("没有找到\n");
}
void Connect(list_own *&L1,list_own *&L2)
{
for(list_own *tmp_L1=L1->next;;tmp_L1=tmp_L1->next)
{
if((tmp_L1->next)==NULL)
{
tmp_L1->next=L2->next;
break;
}
}
DestroyList(L2);
printf("链表连接成功,头节点为第一个链表的头节点\n");
}
void Insert(list_own*&L,list_own*&num,int n)
{
if(num>0)
{
int t=0;
for(list_own *i=L->next;i!=NULL;i=i->next)
{
t++;
if(t==n-1)
{
num->next=i->next;
i->next=num;
break;
}
}
}
}
/*
功能:
CreateList(list_own *&L,int n) 创建链表
print(list_own *L) 打印链表
List_insert(list_own *L,int i,int num) 链表插入,插入在i之前。
select(list_own *L,int i) 查找第i个元素
revise(list_own *L,int i,int num) 将第i个元素替换为
list_spot_delete(list_own *L,int i) 将链表中第i个节点删除
DestroyList(list_own* &L) 删除链表
ListEmpty(list_own* &L) 判断链表是否为空
ListLength(list_own* L) 返回链表长度
select_0(list_own *L,int num) 查找链表中是否含有某个节点的值
Connect(list_own *&L1,list_own *&L2) 将俩个链表连接在一起
Insert(list_own*&L,list_own*&num,int n) 将一个节点插入到链表中
*/
int main ()
{
}
多项式相加与相乘:
#include<bits/stdc++.h>
using namespace std;
struct list_own
{
int num;
list_own *next;
};
const int maxn=1e5;
int a[maxn];
void CreateList(list_own *&L,int n)
{
L=(list_own*)malloc(sizeof(list_own));
list_own* p1=(list_own*)malloc(sizeof(list_own));
L->next=NULL;
p1=L;
list_own* p;
for(int i=0;i<n;i++)
{
int tmp_num;
p=(list_own*)malloc(sizeof(list_own));
scanf("%d",&tmp_num);
p->num=tmp_num;
p->next=p1->next;
p1->next=p;
p1=p;
}
}
void print(list_own *L)
{
for(list_own* p_i=L->next;p_i!=NULL;p_i=p_i->next)
{
printf("%d ",p_i->num);
}
printf("\n");
}
void List_insert(list_own *L,int i,int num)
{
list_own *tmp_p=L->next;
int t=0;
if(i==0)
{
tmp_p=NULL;
list_own*s=(list_own*)malloc(sizeof(list_own));
s->next=tmp_p;
L->next=s;
s->num=num;
return;
}
for(list_own* p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==i)
{
list_own*s=(list_own*)malloc(sizeof(list_own));
s->next=p_i->next;
s->num=num;
p_i->next=s;
break;
}
}
}
int select(list_own *L,int i)
{
list_own *tmp_p=L->next;
int t=0;
bool falg=false;
for(list_own* p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==i)
{
falg=true;
return p_i->num;
}
}
if(!falg)
{
printf("i>0&&i<=n");
return 0;
}
}
void revise(list_own *L,int i,int num)
{
list_own *tmp_p=L->next;
int t=0;
bool falg=false;
for(list_own *p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==i)
{
p_i->num=num;
falg=true;
return ;
}
}
if(!falg)
{
printf("i>0&&i<=n");
return ;
}
}
void list_spot_delete(list_own *L,int i)
{
list_own *tmp_p=L->next;
int t=0;
if(i==1)
{
L->next=(tmp_p->next);
free(tmp_p);
return ;
}
for(list_own *p_i=tmp_p;p_i!=NULL;p_i=p_i->next)
{
t++;
if(t==(i-1))
{
list_own *q=p_i->next;
p_i->next=((p_i->next)->next);
q->next=NULL;
free(q);
return ;
}
}
}
void DestroyList(list_own* &L)
{
list_own* p;
while(L)
{
p=L->next;
free(L);
L=p;
}
printf("链表空间释放\n");
}
bool ListEmpty(list_own* &L)
{
if(L->next==NULL) return true;
else
{
return false;
}
}
int ListLength(list_own* L)
{
int ans=0;
for(list_own* p_i=L->next;p_i!=NULL;p_i=p_i->next)
{
ans++;
}
return ans;
}
void select_0(list_own *L,int num)
{
int t=0;
for(list_own* p_i=L->next;p_i!=NULL;p_i=p_i->next)
{
t++;
if(p_i->num==num)
{
printf("寻找成功,在%d位置",t);
return ;
}
}
printf("没有找到\n");
}
void Connect(list_own *&L1,list_own *&L2)
{
for(list_own *tmp_L1=L1->next;;tmp_L1=tmp_L1->next)
{
if((tmp_L1->next)==NULL)
{
tmp_L1->next=L2->next;
break;
}
}
DestroyList(L2);
printf("链表连接成功,头节点为第一个链表的头节点\n");
}
void Insert(list_own*&L,list_own*&num,int n)
{
if(num>0)
{
int t=0;
for(list_own *i=L->next;i!=NULL;i=i->next)
{
t++;
if(t==n-1)
{
num->next=i->next;
i->next=num;
break;
}
}
}
}
/*
功能:
CreateList(list_own *&L,int n) 创建链表
print(list_own *L) 打印链表
List_insert(list_own *L,int i,int num) 链表插入,插入在i之后。
select(list_own *L,int i) 查找第i个元素
revise(list_own *L,int i,int num) 将第i个元素替换为
list_spot_delete(list_own *L,int i) 将链表中第i个节点删除
DestroyList(list_own* &L) 删除链表
ListEmpty(list_own* &L) 判断链表是否为空
ListLength(list_own* L) 返回链表长度
select_0(list_own *L,int num) 查找链表中是否含有某个节点的值
Connect(list_own *&L1,list_own *&L2) 将俩个链表连接在一起
Insert(list_own*&L,list_own*&num,int n) 将一个节点插入到链表中
*/
int main ()
{
list_own *La;
list_own *Lb;
int n,m,x;
cout<<"规则如下:"<<endl<<"1:格式为:a*x^0+b*x^1+c*x^2+......"<<endl;
cout<<"2:输入1进入多项式相加,输入2进入多项式相乘"<<endl;
scanf("%d",&x);
if(x==1)
{
cout<<"请分别输入俩个多项式的最高次幂是多少"<<endl;
scanf("%d%d",&n,&m);
cout<<"输入系数a,b,c........."<<endl;
CreateList(La,n);
CreateList(Lb,m);
list_own *Lc;
Lc=(list_own*)malloc(sizeof(list_own));
int t=0;
int num1,num2;
for(list_own *p1=La->next,*p2=Lb->next;p1!=NULL||p2!=NULL;)
{
if(p1!=NULL&&p2==NULL)
{
num2=0;
num1=p1->num;
p1=p1->next;
}
else if(p2!=NULL&&p1==NULL)
{
num1=0;
num2=p2->num;
p2=p2->next;
}
else
{
num1=p1->num;
num2=p2->num;
p1=p1->next;
p2=p2->next;
}
List_insert(Lc,t++,num1+num2);
}
t=0;
for(list_own *p1=Lc->next;p1!=NULL;p1=p1->next)
{
if(p1->next!=NULL) printf("%d*x^%d+",p1->num,t++);
else
{
printf("%d*x^%d=0\n",p1->num,t++);
}
}
}
else if(x==2)
{
cout<<"请分别输入俩个多项式的最高次幂是多少"<<endl;
scanf("%d%d",&n,&m);
cout<<"输入系数a,b,c........."<<endl;
CreateList(La,n);
CreateList(Lb,m);
list_own *Lc;
Lc=(list_own*)malloc(sizeof(list_own));
int tmp=0;
int t=0;
int t1=1,t2=1;
for(list_own *p1=La->next;p1!=NULL;p1=p1->next)
{
int tmp_num=0;
for(list_own *p2=La->next;p2!=NULL;p2=p2->next)
{
tmp_num=(p1->num*p2->num);
a[t1+t2]=tmp_num;
t2++;
}
t1++;
t2=1;
}
t2=ListLength(Lb);
t1=ListLength(La);
cout<<"t2:"<<t2<<endl;
cout<<"t1:"<<t1<<endl;
for(int i=2;i<=t1+t2;i++)
{
List_insert(Lc,i-2,a[i]);
}
t=0;
for(list_own *p1=Lc->next;p1!=NULL;p1=p1->next)
{
if(p1->next!=NULL)
{
printf("%d*x^%d+",p1->num,t++);
}
else
{
printf("%d*x^%d\n",p1->num,t++);
}
}
}
return 0;
}