链表的操作

#include<iostream>
#include<cstdio>
#include<cstdlib>
int key=1;
int cmp(const void* a,const void* b)
{
    return *(int*)a-*(int*)b;
}
typedef struct Node
{
    int data;
    struct Node *next;
} Listnode;
Listnode* createhand(int* a)
{
    int i=0;
    Listnode *L,*s;
    L=(Listnode*)malloc(sizeof(Listnode));
    L->next=NULL;
    while(a[i]!=1000000)
    {
        s=(Listnode*)malloc(sizeof(Listnode));
        s->data=a[i];
        s->next=L->next;
        L->next=s;
        i++;
    }
    return L;
}
Listnode* createtail(int* a)
{
    Listnode *L,*s,*r;
    int i=0;
    L=(Listnode*)malloc(sizeof(Listnode));
    r=L;
    while(a[i]!=1000000)
    {
        s=(Listnode*)malloc(sizeof(Listnode));
        s->data=a[i];
        r->next=s;
        r=s;
        i++;
    }
    r->next=NULL;
    return L;
}
Listnode* createAstyle(int* a,int n)
{
    Listnode *L,*s,*r;
    int i=0;
    qsort(a,n,sizeof(a[0]),cmp);
    L=(Listnode*)malloc(sizeof(Listnode));
    r=L;
    while(a[i]!=1000000)
    {
        s=(Listnode*)malloc(sizeof(Listnode));
        s->data=a[i];
        r->next=s;
        r=s;
        i++;
    }
    r->next=NULL;
    return L;

}
int findingrank(Listnode* L,int rank)
{
    Listnode *p;
    p=L->next;
    int i=0;
    while(i<rank-1&&p)
    {
        p=p->next;
        i++;
    }
    if(!p)
    {
        printf("YOU CAN FIND NOTHING!!!\n");
        return 373575327;
    }
    return p->data;
}
int findingdata(Listnode* L,int data0)
{
    Listnode *p;
    int i=0;
    p=L->next;
    while(p)
    {
        if(p->data==data0)
            break;
        i++;
        p=p->next;
    }
    if(!p)
    {
        printf("YOU CAN FIND NO LOCATION!!!\n");
        return 373575327;
    }
    else
        printf("是第%d个元素\n",i+1);
    return 0;
}
void outputnode(Listnode* L)
{
    Listnode *p,*tmp;
    p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        tmp=p->next;
        if(key) free(p);
        p=tmp;
    }
    printf("\n");
}
int deleterank(Listnode* L,int rank)
{
    Listnode *p,*q;
    int i=0;
    p=L;
    while(i<rank-1&&p)
    {
        i++;
        p=p->next;
    }
    if(!p) return 0;
    else
    {
        q=p->next;
        p->next=q->next;
        free(q);
    }
    key=0;
    outputnode(L);
    return 0;
}
int deletedata(Listnode* L,int data0)
{
    Listnode *p,*q;
    p=L;
    while(p->next->data!=data0)
        p=p->next;
    q=p->next;
    p->next=q->next;
    free(q);
    key=0;
    outputnode(L);
    return 0;
}
Listnode* addtonew(Listnode* A,Listnode* B)
{
    Listnode *C,*s,*r,*p,*q;
    C=(Listnode*)malloc(sizeof(Listnode));
    r=C;
    p=A;
    q=B;
    p=p->next;
    while(p)
    {
        s=(Listnode*)malloc(sizeof(Listnode));
        s->data=p->data;
        r->next=s;
        r=s;
        p=p->next;
    }
    q=q->next;
    while(q)
    {
        s=(Listnode*)malloc(sizeof(Listnode));
        s->data=q->data;
        r->next=s;
        r=s;
        q=q->next;
    }
    r->next=NULL;
    key=0;
    outputnode(C);
    return C;
}
Listnode* addtoold(Listnode*A,Listnode*B)
{
    Listnode *r,*tmp,*q,*s;
    tmp=A;
    q=B;
    while(tmp->next) tmp=tmp->next;
    r=tmp;
    q=q->next;
    while(q)
    {
        s=(Listnode*)malloc(sizeof(Listnode));
        s->data=q->data;
        r->next=s;
        r=s;
        q=q->next;
    }
    r->next=NULL;
    key=0;
    outputnode(A);
    return A;
}
int main()
{
    int a[6]= {1,2,10,4,5,1000000};//1000000用于大数标记
    int b[6]= {7,90,23,75,2,1000000};
    int keep;
    Listnode *A,*B,*C;
    A=createAstyle(a,6);
    B=createAstyle(b,6);
    C=addtoold(A,B);
    key=1;
    outputnode(C);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值