内存:128  时间:1

题目描述

(线性表)已知线性表(a1 a2 a3 an)按顺序存于内存,每个元素都是整数,试设计用最少时间把所有值为负数的元素移到全部正数值元素前边的算法:

输入

输入长度n:6

输入数据:-x -x x x -x x

输出

-x -x –x x x x

样例输入

7
1 -5 -4 2 8 -9 10

样例输出

-5 -4 -9 1 2 8 10

提示

代码如下

#include<stdio.h>
typedef struct Lnode
{
    int data;
    struct Lnode *next;
}LinkList;

LinkList *creat(int n)
{
    int i,m;
    LinkList *L,*r,*s;
    L=(LinkList *)malloc(sizeof(LinkList));
    r=L;
    while(n>0)
    {
        scanf("%d",&m);
        s=(LinkList *)malloc(sizeof(LinkList));
        s->data=m;
        r->next=s;
        r=s;
        n--;
    }
    r->next=NULL;
    return L;
}

LinkList *chang(LinkList *L)
{
    LinkList *r,*per,*pf,*p;
    per=L;
    r=L;
    while(r->next!=NULL)
    {
        if(r->next->data<0)
        {
            if(r==L||r->data<0)
            {
                per=r->next;
                r=r->next;
            }
            else
            {
                pf=r->next;
            r->next=pf->next;
            pf->next=per->next;
            per->next=pf;
            per=pf;
            }
        }
        else
            r=r->next;
    }
    return L;
}

void output(LinkList *L)
{
    LinkList *r;
    r=L->next;
    while(r!=NULL)
    {
        printf("%d ",r->data);
        r=r->next;
    }
}

void destory(LinkList *L)
{
    LinkList *p;
    p=L;
    while(p!=NULL)
    {
        L=p;
        p=p->next;
        free(L);
    }
}
int main()
{
    int n;
    LinkList *L;
    scanf("%d",&n);
    L=creat(n);
    L=chang(L);
    output(L);
    destory(L);
    return 0;
}

代码来源于互联网,仅供参考!