复试上机练习day1(线性表)

#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
typedef struct Link{
int data;
int len;
struct Link *next;
}*Link,Lnode;

Link HcreateLink(int n)
{
    int i;
    Link L;
    Link p,q;
    L->len=0;
    L=(Link)malloc(sizeof(Lnode));
    if(!L)exit(-1);
    L->next=NULL;
    for(i=0;i<n;i++)
    {
        p=(Link)malloc(sizeof(Lnode));
        scanf("%d",&(p->data));
        p->next=L->next;
        L->next=p;
        L->len++;
    }
    return L;
}

Link TcreateLink(int n)
{
    int i;
    Link p,q,L;
    L=(Link)malloc(sizeof(Lnode));
    L->next=NULL;
    q=L;
    L->len=0;
    for(i=0;i<n;i++)
    {
        p=(Link)malloc(sizeof(Lnode));
        scanf("%d",&(p->data));
        p->next=q->next;
        q->next=p;
        q=p;
        L->len++;
    }

    /*p=L->next;
    while(p!=NULL)
    {
        printf("%d  ",p->data);
        p=p->next;
    }*/
    return L;//刚开始没有return
}

void output(Link L)
{
    Link p,q;
    p=L->next;

    while(p!=NULL)
    {
        printf("%d  ",p->data);
        p=p->next;//刚开始没写这句
    }
    printf("\n");
    //printf("%d\n",L->len);
}

//在第i位插入k
void insert(Link L,int i,int k)
{
    Link p,q;
    int j;
    p=L;
    for(j=1;j<i;j++)
    {
        p=p->next;
    }
    q=(Link)malloc(sizeof(Lnode));
    L->len++;
    //scanf("%d",&q->data);
    q->data=k;
    q->next=p->next;
    p->next=q;
}

void del(Link L,int i)
{
    Link p,q;
    int j;
    p=L;
    for(j=1;j<i;j++)
    {
        p=p->next;
    }
    L->len--;
    q=p->next;
    p->next=q->next;
    free(q);
}

Link merge(Link La,Link Lb)//if if 不要乱用!!改为if else,if else if<
{
    /*Link L,p,q,t;
    L->len=0;
    L=t=La;
    p=La->next;
    q=Lb->next;
    while(p&&q)
    {
        if(p->data<=q->data)
        {
            t->next=p;
            t=p;
            p=p->next;
            L->len++;
        }
         else
        {

            t->next=q;
            t=q;
            q=q->next;
            L->len++;
        }

    }
   while(p)
   {
            t->next=p;
            t=p;
            p=p->next;
            L->len++;
    }
     while(q)
    {
            t->next=q;
            t=q;
            q=q->next;
            L->len++;
    }
        t->next=NULL;
        return L;*/

  /* Link p,q,r,L;
    L=q=La;
    p=La->next;
    r=Lb->next;
    while(p&&r)
    {
        if(p->data<r->data)
        {
            q->next=p;
            q=p;
            p=p->next;
        }
        else if(p->data>r->data)
        {
            q->next=r;
            q=r;
            r=r->next;
        }

    }
    while(p)
    {
        q->next=p;
        q=p;
        p=p->next;
    }
    while(r)
    {
        q->next=r;
        q=r;
        r=r->next;
    }
    return L;*/






    Link L,p,q,r;
    L=r=La;
    L->len=0;
    p=La->next;
    q=Lb->next;
    while(p&&q)
    {
        if(p->data<q->data)
        {
            r->next=p;
            r=p;
            p=p->next;
        }
        else
        {
            r->next=q;
            r=q;
            q=q->next;
        }
        L->len++;
    }
    while(p)
    {
        r->next=p;
        r=p;
        p=p->next;
    }
    while(q)
    {
        r->next=q;
        r=q;
        q=q->next;
    }
    return L;
}
main()
{
    Link La,Lb,L;
    La=HcreateLink(4);
    output(La);
    Lb=HcreateLink(4);
    output(Lb);
    L=merge(La,Lb);
    output(L);
    /*output(L);
    L=TcreateLink(4);
    output(L);
    insert(L,1,1);
    output(L);
    del(L,1);
    output(L);*/
    return 0;
}

很久没有敲代码了,昨天一个朋友的毕设让我帮他画一个回溯算法的程序流程图都很吃力,一个文科的学长还经常问我Java,python什么的,再不练就凉凉了,坚持每天练两个小时吧。

出现ld.exe||cannot open output file bin\Debug\demo1.exe错误,打开任务管理器找到demo1.exe 杀死就行。

猜你喜欢

转载自blog.csdn.net/baidu_36536257/article/details/80152176