您的位置:首页 > 理论基础 > 数据结构算法

数据结构顺序队列的各种操作

2013-05-21 21:49 369 查看
/**  
    头文件stu.h  
    @jeasn168  
*/    
#include<stdio.h>    
#include<string.h>    
#define MaxS 50    
typedef struct    
{    
    char name[MaxS];    
    char stuno[MaxS];    
    float score;    
}stu;    
//输出stu    
void DispStu(const stu &s)    
{    
    printf("Name:%s\n",s.name);    
    printf("StuNo:%s\n",s.stuno);    
    printf("Score:%f\n",s.score);    
}    
     
     
//比较stu类型    
int isEqual(const stu &a,const stu &b)    
{    
    if(strcmp(a.name,b.name)==0&&strcmp(a.stuno,b.stuno)==0&&a.score==b.score)    
        return 1;    
    else    
        return 0;    
}    
     
  
/**
	顺序队列SqQueue.cpp
	队尾插入,队首删除
	@jeasn168
*/
#include<stdio.h>
#include<malloc.h>
#include"stu.h"
#define MaxSize 5//对的最大长度+1
typedef stu ElemType;
//定义顺序队列结构
typedef struct
{
	ElemType data[MaxSize];
	int front;
	int rear;
}SqQueue;

//初始化
void InitQueue(SqQueue *&q)
{
	q=(SqQueue *)malloc(sizeof(SqQueue));
	q->front=q->rear=0;
}

//销毁队列
void DestroyQueue(SqQueue *&q)
{
	free(q);
	printf("销毁队列!\n");
}

//判断对是否为空
int QueueEmpty(SqQueue *q)
{
	return(q->front==q->rear);
}

//判断对是否已满
int QueueFull(SqQueue *q)
{
	return((q->rear+1)%MaxSize==q->front);
}

//求队列长度
int QueueLength(SqQueue *q)
{
	int len=q->rear-q->front;
	return(len>0?len:MaxSize+len);
}
//入队,从队尾入队,食堂排队打饭
int enQueue(SqQueue *&q,const ElemType &e)
{
	if(QueueFull(q))
	{
		printf("队满!\n");
		return 0;
	}
	q->rear=(q->rear+1)%MaxSize;
	q->data[q->rear]=e;
	return 1;

}

//出队,从队首出队
int deQueue(SqQueue *&q,ElemType &e)
{
	if(QueueEmpty(q))
	{
		printf("队已空!\n");
		return 0;
	}
	q->front=(q->front+1)%MaxSize;//q->front指向未知量,q->front+1才是队列的第一个元素!,出队的元素还在数组中。
	e=q->data[q->front];
	//q->front++;
	return 1;
}

//输出队列元素,从队首到队尾
void DispQueue(SqQueue *q)
{
	int i,j;
	if(q->front<q->rear)
	{
		//队首比队尾小
		for(i=q->front+1;i<=q->rear;i++)
		{
			DispStu(q->data[i]);
			printf("\n");
		}

	}
	else
	{
		//对首比队尾大
		for(i=q->front+1;i<q->front+QueueLength(q)-q->rear;i++)
		{
			DispStu(q->data[i]);
			printf("\n");
		}
	//	printf("q->data[i]=:\n");
	//	DispStu(q->data[i-1]);
		printf("#######从数组头部开始############\n");
		for(j=0;j<=q->rear;j++)
		{
			DispStu(q->data[j]);
			printf("\n");
		}
	}
	
	

}
int main()
{
	stu student[5]={{"Li","S12101",85},{"Liu","S12102",92.5},{"Wang","S12103",54},{"Huang","S12104",76},{"John","S12105",78}};
	stu st1={"LiLy","S12108",85},st2;
	int t=sizeof(student)/sizeof(stu);
	int i=0;
	SqQueue *stuQueue;
	printf("初始化!\n");
	InitQueue(stuQueue);
	printf("构建队列\n");
	for(i=0;i<t;i++)
	{
		enQueue(stuQueue,student[i]);
	}
	printf("队长:%d\n",QueueLength(stuQueue));
	
	printf("输出队列:\n");
	DispQueue(stuQueue);

	printf("*****************\n");
	printf("队首出队:\n");
	deQueue(stuQueue,st2);
	DispStu(st2);
	printf("输出出队后的队列:\n");
	DispQueue(stuQueue);
	printf("队长:%d\n",QueueLength(stuQueue));

	printf("入队一个元素:\n");
	enQueue(stuQueue,st1);
	DispQueue(stuQueue);
	printf("队长:%d\n",QueueLength(stuQueue));
	DestroyQueue(stuQueue);
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: