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

2025-03-18 02:52:46
推荐回答(1个)
回答1:

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

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

#include

#include

#include

#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

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

    for(i=0;i

        for(j=i+1;j

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

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

    for(i=0;i

    printf("\n\n");

}

void doByLLT()//用单链表做

{

    int i;

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

    for(i=0;i

    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;

}