链表 (自写模板)和一个简单的应用(多项式相加和相乘)

  

   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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值