您的位置:首页 > 其它

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

2015-05-16 18:51 447 查看
/*使用两个辅助的队列和非数组变量设计一个算法以使队列中的元素有序*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 20
typedef 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,其余的放入队列L
Status 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的元素入队原先的队列S
Status 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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐