数结构编程题,求大佬帮忙,C语言的?

尝试编写过程实现功能:将线性表中的所有负值放到所有正值的前面。要求编写线性表分别用顺序表和单链表存储,实现该功能的两个过程

线性表用数组实现,单链表用带链表指针的结构实现。

这里数据的录入,我用随机数生成两组-99到99的两位数来填充线性表和单链表,利用冒泡排序升序排列,这样负数就都到正数前面了。分两个函数:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define M 10//最大数据个数

typedef struct llist

{

    int n;

    struct llist *next;

}LLT;

void doByST();//用顺序表做

void doByLLT();//用单链表做

int main()

{

    srand(time(NULL));//利用随机数(正负两位数-99~99)填充顺序表及单链表

    doByST();

    doByLLT();


}


void doByST()//用顺序表做

{

    int i,j,st[M];

    printf("顺序表中的数据:\n");

    for(i=0;i<M;i++) st[i]=((rand()%2)?1:-1)*(rand()%90+10),printf("%d ",st[i]);

    printf("\n将所有负值放到所有正值前面:\n");

    for(i=0;i<M;i++)

        for(j=i+1;j<M;j++)

            if(st[i]>st[j])

                st[i]^=st[j],st[j]^=st[i],st[i]^=st[j];

    for(i=0;i<M;i++) printf("%d ",st[i]);//打印结果

    printf("\n\n");

}

void doByLLT()//用单链表做

{

    int i;

    LLT llist[M],*lltp=llist,*lltp2=NULL;

    for(i=0;i<M-1;i++) llist[i].next=&llist[i+1];//单链表

    llist[i].next=NULL;

    printf("\n单链表中的数据:\n");

    while(lltp!=NULL)

    {

        lltp->n=((rand()%2)?1:-1)*(rand()%90+10);

        printf("%d ",lltp->n);

        lltp=lltp->next;

    }

    printf("\n将所有负值放到所有正值前面\n");

    lltp=llist;

    while(lltp!=NULL)

    {

        lltp2=lltp->next;

        while(lltp2!=NULL)

        {

            if(lltp->n>lltp2->n)

                lltp->n^=lltp2->n,lltp2->n^=lltp->n,lltp->n^=lltp2->n;

            lltp2=lltp2->next;

        }

        lltp=lltp->next;

    }

    lltp=llist;//--打印结果

    while(lltp!=NULL) printf("%d ",lltp->n),lltp=lltp->next;

}

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答