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

尝试编写过程实现功能:将线性表中的所有负值放到所有正值的前面。要求编写线性表分别用顺序表和单链表存储,实现该功能的两个过程... 尝试编写过程实现功能:将线性表中的所有负值放到所有正值的前面。要求编写线性表分别用顺序表和单链表存储,实现该功能的两个过程 展开
 我来答
自我编程
2020-01-12 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

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

这里数据的录入,我用随机数生成两组-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;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式