当前位置: 代码迷 >> 综合 >> 循环队列 c 实现!!!!
  详细解决方案

循环队列 c 实现!!!!

热度:68   发布时间:2023-10-18 05:12:49.0

上数据结构课的时候老师让写了一个循环队列子系统。

代码如下:


#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
#define datatype chartypedef struct          //循环队列结构体
{datatype data[MAXLEN];int rear,front,n;		//rear对尾位置,front队首位置,n队列中元素个数;
} csequeue;
csequeue *line;				//一个csequeue类型的指针;
void inqueue()      //进队;
{char x;if(line==NULL)			//如果指针为空{line=(csequeue*)malloc(sizeof(csequeue));	//创建一个结构体line->rear=line->front=1;					//对rear,front,n初始化,==1可以是一个在MAXLEN范围内的任意值line->n=0;}printf("\t请输入进队元素:");scanf(" %c",&x);if(line->front ==(line->rear + 1) % MAXLEN)		//判断队满,原理:队尾元素加1等于队首元素的时候判定为队满{printf("\t队满,进队失败!");return ;}line->rear=(line->rear+1)% MAXLEN;				//队尾标记加一line->data[line->rear]=x;						//给队尾元素赋值line->n++;										//队列长度加一printf("\t进队成功!!");
}
void dequeue ()     //出队 
{if(line==NULL||line->rear==line->front)			//判断,如果指针为空,或者队空的情况;{printf("\t队空,出队失败!");return ;}line->front=(line->front+1)%MAXLEN;				//因为front所指位置元素不属于队列,所以先加后输出printf("\t出队元素为:%c",line->data[line->front]);line->n--;
}
void showqueue ()       //显示队列;
{int i;if(line==NULL||line->rear==line->front){printf("\t队空!!!!");return ;}i=line->front;printf("\t队列元素为:");while(i!=line->rear)							//当标记变量i不等于队尾位置时,line->data中(i+1)%MAXLEN元素,因为一开始front所指元素不属于队列{printf(" %c",line->data[(i+1)%MAXLEN]);i=(i+1)%MAXLEN;				//对MAXLEN取余使得i的值始终在零到MAXLEN范围内;}
}
void queuelength()      //显示队列长度;
{if(line==NULL){printf("\t无队,请先创建队!");return ;}printf("\t队列长度为:%d",line->n);
}
void returnn()
{free(line);			//释放队列==释放空间;return ;
}
int main ()
{int m=1;printf("\t\t\t----循环队列子系统c实现----\n\n");while(m!=0){printf("\n\t\t******************************************\n");printf("\t\t*               指令说明                 *\n");printf("\t\t*             1----进    队              *\n");printf("\t\t*             2----出    队              *\n");printf("\t\t*             3----显    示              *\n");printf("\t\t*             4----队列长度              *\n");printf("\t\t*             0----返    回              *\n");printf("\t\t******************************************\n\n");printf("\t请输入指令:");scanf(" %d",&m);switch(m){case 1:inqueue();break;case 2:dequeue();break;case 3:showqueue();break;case 4:queuelength();break;case 0:returnn();return 0;default :printf("\t输入有误!请重新输入~\n\n");break;}}return 0;
}






  相关解决方案