#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct{
// 环形队列元素存储空间基质
DataType *data;
// 环形队列头尾
int front,rear;
}SeqQueue; //环形队列类型
int go_on(){
int flag=1,i;
char choice;
while (1) {
printf("继续请输入1,停止请输入0\n");
scanf("%d",&i);
if (i==1) {
break;
}
else if (i==0) {
flag=0;
break;
}
else {
printf("请按要求输入,谢谢\n");
}
}
return (flag);
}
// 初始化运算,构造一个空环状队列
int Init_SeqQueue(SeqQueue *Q,int n){
Q->data=(DataType *)malloc(n*sizeof(DataType));
if (Q->data==NULL) {
printf("\n内存分配失败\n");
exit(-1);
}
Q->front=Q->rear=0;
}
// 判断队空运算
int Empty_SeqQueue(SeqQueue *Q){
if (Q->front==Q->rear) {
return 1;
}
else {
return 0 ;
}
}
// 判断队满运算
int Full_SeqQueue(SeqQueue *Q){
if ((Q->rear+1)%MAXSIZE==Q->front) {
return 1;
}else {
return 0;
}
}
// 求队长运算
int Length_SeqQueue(SeqQueue *Q){
int k;
k=(Q->rear-Q->front+MAXSIZE)%MAXSIZE;
return k;
}
void Length(SeqQueue *Q){
int k;
k=Length_SeqQueue(Q);
printf("\n队长:%d\n",k);
}
// 入队运算,插入元素e为新的队头元素
int EnQueue_SeqQueue(SeqQueue *Q,DataType e){
if (Full_SeqQueue(Q)==1) {
printf("队满不能入队\n");
return 0;
}else {
Q->data[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1;
}
}
void EnQueue(SeqQueue *Q){
DataType x;
int flag=1,enqueue_flag;
while (flag) {
printf("\n请输入要入队的元素:\n");
scanf("%d",&x);
enqueue_flag=EnQueue_SeqQueue(Q,x);
if (enqueue_flag==1) {
printf("\n入队成功\n");
}else {
printf("\n入队失败\n");
}
flag=go_on();
}
}
// 出队运算,出队,删除队头元素。并由*e返回其值
int DeQueue_SeqQueue(SeqQueue *Q,DataType *e){
if (Empty_SeqQueue(Q)) {
printf("\n队空,不能出队\n");
return 0;
}else {
*e=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return 1;
}
}
void DeQueue(SeqQueue *Q){
DataType x ;
int flag=1,dequeue_flag;
while (flag) {
dequeue_flag=DeQueue_SeqQueue(Q, &x);
if (dequeue_flag==1) {
printf("\n出队成功,出队元素为:%d\n",x);
}else {
printf("出队失败");
}
flag=go_on();
}
}
// 取队头运算
int GetFront_SeqQueue(SeqQueue *Q,DataType *e){
if (Empty_SeqQueue(Q)) {
printf("\n队空,不能取队头元素\n");
return 0;
}
else {
*e=Q->data[Q->front];
return 1;
}
}
void Display_Front(SeqQueue *Q){
DataType e;
if (Empty_SeqQueue(Q)==1) {
printf("\n队空,没有元素\n");
}else {
GetFront_SeqQueue(Q, &e);
printf("\n队头元素\n");
printf("%4d\n",e);
}
}
// 输出全部元素
void Display_SeqQueue(SeqQueue *Q){
int k,len;
if (Empty_SeqQueue(Q)==1) {
printf("\n队空,没有元素\n");
}else {
printf("\n队头全部元素\n");
printf("\n队头<---------------->队尾\n");
len=Length_SeqQueue(Q);
for(k=0;k<len;k++)
printf("%4d",Q->data[(Q->front+k)%MAXSIZE]);
}
}
main(){
SeqQueue Q;
int flag=1,j;
Init_SeqQueue(&Q,MAXSIZE);
do {
printf("\n");
printf("-------循环队列的实现---------\n");
printf("入队请摇1\n");
printf("出队请摇2\n");
printf("输出队长请摇3\n");
printf("输出队头元素请摇4\n");
printf("输出全部元素请摇5\n");
printf("退出请摇0\n");
printf("----------------------\n");
scanf("%d",&j);
switch (j) {
case 1:EnQueue(&Q);break;
case 2:DeQueue(&Q);break;
case 3:Length(&Q);break;
case 4:Display_Front(&Q);break;
case 5:Display_SeqQueue(&Q);break;
case 0:flag=0;printf("感谢大哥的使用\n");break;
}
}while (flag==1);
}
队列的实现(C语言)
最新推荐文章于 2024-05-23 20:47:46 发布