使用两个辅助的队列和非数组变量设计一个算法以使队列中的元素有序

来源:互联网 发布:知乎咖啡的好处与坏处 编辑:程序博客网 时间:2024/06/05 04:35
/*使用两个辅助的队列和非数组变量设计一个算法以使队列中的元素有序*/#include<stdio.h>#include<stdlib.h>#include<time.h>#define OK 1#define ERROR 0#define MAXSIZE 20typedef int QElemType;typedef int Status;typedef struct {    QElemType data[MAXSIZE];    int front;    int rear;}SqQueue;//循环队列的初始化Status InitSqQueue(SqQueue * S){    S->front=0;    S->rear=0;    return OK;}//循环队列的建立Status create(SqQueue * S,int n){    srand((unsigned)time(NULL));    for(int i=0;i<n;i++)    {        S->data[i]=rand()%100;        S->rear++;    }    return OK;}//循环队列的入队Status EnQueue(SqQueue * S,QElemType e){       S->data[S->rear]=e;    S->rear=(S->rear+1)%MAXSIZE;    return OK;}//循环队列的出队Status DeQueue(SqQueue * S,QElemType * e){    *e=S->data[S->front];    S->front=(S->front+1)%MAXSIZE;    return OK;}//循环队列的长度Status Length(SqQueue * S){    return (S->rear-S->front+MAXSIZE)%MAXSIZE;}//输出void print(SqQueue * S){    printf("输出元素:\n");    int length=(S->rear-S->front+MAXSIZE)%MAXSIZE;    for(int i=S->front;i<length;i++)    {        printf("%d ",S->data[i]);    }    printf("\n");}//找出最大元素的下标Status GetMax(SqQueue * S){    int length=Length(S);    int temp=S->front;    for(int i=1;i<length;i++)    {        if(S->data[temp]<S->data[i])        {            temp=i;        }    }    return temp;}//将最大元素放入队列Q,其余的放入队列LStatus GetMaxOut(SqQueue * S,SqQueue * Q,SqQueue * L){    QElemType DeElem;    int length=Length(S);    QElemType MaxIndex=GetMax(S);    EnQueue(Q,S->data[MaxIndex]);    for(int i=0;i<length;i++)    {        if(i==MaxIndex)        {            DeQueue(S,&DeElem);            continue;        }            DeQueue(S,&DeElem);            EnQueue(L,DeElem);    }    InitSqQueue(S);    return OK;}//排序Status Sort(SqQueue * S,SqQueue * Q,SqQueue * L){    int length=Length(S);       for(int i=0;i<length;i++)    {        if(i%2==0)        GetMaxOut(S,Q,L);        else        GetMaxOut(L,Q,S);    }    return OK;}//将队列Q的元素出队,将队列Q的元素入队原先的队列SStatus PutBackS(SqQueue * Q,SqQueue * S){    QElemType DeElem;    int length=Length(Q);    for(int i=0;i<length;i++)    {        DeQueue(Q,&DeElem);        EnQueue(S,DeElem);    }    return OK;}int main(){    SqQueue S,Q,L;    int ElemNumber;    InitSqQueue(&S);    InitSqQueue(&Q);    InitSqQueue(&L);    printf("输入元素个数:\n");    scanf("%d",&ElemNumber);    create(&S,ElemNumber);    print(&S);    Sort(&S,&Q,&L);    PutBackS(&Q,&S);    print(&S);    return 0;}

运行结果

0 0