您的位置:首页 > 其它

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

2015-05-16 18:58 375 查看
/*使用一个辅助的队列和非数组变量设计一个算法以使队列中的元素有序*/
#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=S->front+1;i<length+S->front;i++)//关键句,重点是加上S->front!!!!!
{
if(S->data[temp]<S->data[i])
{
temp=i;
}
}
return temp;
}

//把最大元素和front(data[0])元素进行交换,然后出队,入队进新的队列里
Status SwapMax(SqQueue * S,SqQueue * L)
{
QElemType DeElem;
int temp;
int Index=GetMax(S);
temp=S->data[Index];
S->data[Index]=S->data[S->front];
S->data[S->front]=temp;
DeQueue(S,&DeElem);
EnQueue(L,DeElem);
return OK;
}

//排序
Status Sort(SqQueue * S,SqQueue * L)
{
QElemType DeElem;
int length=Length(S);
for(int i=0;i<length;i++)
{
SwapMax(S,L);
}
InitSqQueue(S); //这一步是重新初始化队列S(或者完善初始化函数)
for(int j=0;j<length;j++)
{
DeQueue(L,&DeElem);
EnQueue(S,DeElem);
}
return OK;
}

int main()
{
SqQueue S,L;
int ElemNumber;
InitSqQueue(&S);
InitSqQueue(&L);
printf("输入元素个数:\n");
scanf("%d",&ElemNumber);
create(&S,ElemNumber);
print(&S);
Sort(&S,&L);
print(&S);
return 0;
}


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