主题:[原创]循环队列运算实现
hngy244902
[专家分:0] 发布于 2005-11-04 13:40:00
哪位高手帮我填空?
#include <stdio.h>
#define MAXLEN 10
typedef char DataType;
typedef struct
{
DataType* Q; /*数据存储区首地址*/
int front,rear; /*队头、队尾指针*/
}cycQue; /*循环队*/
void InitCycQue(CycQue* sp)
{
xp->Q=(DataType*)malloc(MAXLEN*sizeof(DataType));
if(sp->Q==NULL)
{
printf("\t\t\t内存分配错误\n");
}
sp->fo\ront=sp->rear=0;
printf("\t\t\t内存分配成功\n");
}
int InsertCycQue(CycQue* sp,DataType x)
{
if((sp->rear+1)%MAXLEN==sp->front)
{
printf("\t\t\t队满!不能再插入元素\n");
return 0; /*队满不能入队*/
}
else
{
sp->rear=(sp->rear+1)%MAXLEN;
sp->Q[sp->rear]=x;
return 1; /*入队完成*/
}
}
int ExitCycQue(CycQue* sp,DataType x) /*将循环队列的队首元素出队,值送入x */
{
printf("\t\t\t请您输入程序代码!\n");
}
int LenCycQue(CycQue* sp) /*求循环队列的长度*/
{
printf("\t\t\t请您输入程序代码!\n");
}
void ShowCycQue(CycQue* sp)
{
int i;
printf("\n\t\t\t显示循环队列的所有元素:");
if (sp->front==sp->rear)
printf("\n\t\t\t循环队列为空!\n");
else
{
printf("\n\t\t");
i=(sp->front+1)%MAXLEN;
while(i<=sp->rear)
{
printf("\t%C",sp->Q[i]);
i=i+1o%MAXLEN;
}
}
}
main()
{
CycQue sp;
int j=1;
char choice,x;
while(j)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n\t\t\t循 环 队 列\n;");
printf("\n\t\t\t* 1------------队列初始化 *");
printf("\n\t\t\t* 2------------进 队 *");
printf("\n\t\t\t* 3------------出 队 *");
printf("\n\t\t\t* 4------------求 队 长 *");
printf("\n\t\t\t* 5------------显示 队列 *");
printf("\n\t\t\t* 6------------退 出 *");
printf("\n\t\t\t***************************************");
printf("\n\t\t\t请选择菜单号:0-5...");
scanf("%c",&choice);
getchar();
if (choice=='1')
InitCycQue(&sp);
else if(choice=='2')
{
printf("\n\t\t\t请输入需要插入的x的值:");
scanf("%c",&x);getchar();
InsertCycQue(&sp,x);
}
else if(choice=='3')
{ExitCycQue(&sp,&x);}
else if (choice=='4')
LenCycQue(&sp);
else if (choice=='5')
ShowCycQue(&sp);
else if (choice=='0')
{
j=0;
printf("\t\t\t程序结束!\n");
}
else printf("\n\t\t\t输入错误!请重新输入!\n");
}
}
回复列表 (共15个回复)
沙发
静雨听风 [专家分:260] 发布于 2005-11-03 21:19:00
哪位高手帮我填空?
#include <stdio.h>
#define MAXLEN 10
typedef char DataType;
typedef struct
{
DataType* Q;
int front,rear;
}cycQue;
void InitCycQue(CycQue* sp)
{
xp->Q=(DataType*)malloc(MAXLEN*sizeof(DataType));
if(sp->Q==NULL)
{
printf("\t\t\t内存分配错误\n");
}
sp->fo\ront=sp->rear=0; /*sp->front=sp->rear=0;*/
printf("\t\t\t内存分配成功\n");
}
int InsertCycQue(CycQue* sp,DataType x)
{
if((sp->rear+1)%MAXLEN==sp->front)
{
printf("\t\t\t队满!不能再插入元素\n");
return 0;
}
else
{
sp->rear=(sp->rear+1)%MAXLEN;
sp->Q[sp->rear]=x; /* Q不是一个数组类型吧*/
return 1;
}
}
int ExitCycQue(CycQue* sp,DataType x)
{
printf("\t\t\t请您输入程序代码!\n"); *这个程序/是要实现什么呀*/
}
int LenCycQue(CycQue* sp)
{
printf("\t\t\t请您输入程序代码!\n");/*这个程序是要实现什么呀*/
}
void ShowCycQue(CycQue* sp)
{
int i;
printf("\n\t\t\t显示循环队列的所有元素:");
if (sp->front==sp->rear)
printf("\n\t\t\t循环队列为空!\n");
else
{
printf("\n\t\t");
i=(sp->front+1)%MAXLEN;
while(i<=sp->rear)
{
printf("\t%C",sp->Q[i]);
i=i+1o%MAXLEN;
}
}
}
main()
{
CycQue sp;
int j=1;
char choice,x;
while(j)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n\t\t\t循 环 队 列\n;");
printf("\n\t\t\t* 1------------队列初始化 *");
printf("\n\t\t\t* 2------------进 队 *");
printf("\n\t\t\t* 3------------出 队 *");
printf("\n\t\t\t* 4------------求 队 长 *");
printf("\n\t\t\t* 5------------显示 队列 *");
printf("\n\t\t\t* 6------------退 出 *");
printf("\n\t\t\t***************************************");
printf("\n\t\t\t请选择菜单号:0-5...");
scanf("%c",&choice);
getchar();
if (choice=='1')
InitCycQue(&sp);
else if(choice=='2')
{
printf("\n\t\t\t请输入需要插入的x的值:");
scanf("%c",&x);getchar();
InsertCycQue(&sp,x);
}
else if(choice=='3')
{ExitCycQue(&sp,&x);}
else if (choice=='4')
LenCycQue(&sp);
else if (choice=='5')
ShowCycQue(&sp);
else if (choice=='0')
{
j=0;
printf("\t\t\t程序结束!\n");
}
else printf("\n\t\t\t输入错误!请重新输入!\n");
}
}
怎么一点注译都没有呀
好难看哦,
还好程序不太难,不过我没有改,只是随便看了下,
我想有人会来答的
板凳
wjsuper [专家分:30] 发布于 2005-11-04 11:12:00
你也把空写出来啊
3 楼
地平线 [专家分:480] 发布于 2005-11-04 13:03:00
看不懂啊,
跟内存 有什么关系啊
还有那个 Q 是 什么东西啊
4 楼
地平线 [专家分:480] 发布于 2005-11-04 13:04:00
1楼的帮忙解释下啊,
5 楼
yuanxinen [专家分:20] 发布于 2005-11-04 22:36:00
是要完善程序吗?
是的话请回复
6 楼
hngy244902 [专家分:0] 发布于 2005-11-05 12:04:00
对
就是要完善程序
7 楼
yuanxinen [专家分:20] 发布于 2005-11-08 12:19:00
#include <stdio.h>#define MAXLEN 10typedef char DataType;
typedef struct{ DataType* Q; /*数据存储区首地址*/ int front,rear; /*队头、队尾指针*/}cycQue; /*循环队*/void InitCycQue(CycQue* sp){ sp>Q=(DataType*)malloc(MAXLEN*sizeof(DataType)); if(sp->Q==NULL){ printf("\t\t\t内存分配错误\n");}sp->front=sp->rear=0;printf("\t\t\t内存分配成功\n");}int InsertCycQue(CycQue* sp,DataType x){ if((sp->rear+1)%MAXLEN==sp->front){ printf("\t\t\t队满!不能再插入元素\n"); return 0; /*队满不能入队*/}else{sp->Q[sp->rear]=x; sp->rear=(sp->rear+1)%MAXLEN;
return 1; /*入队完成*/}}int ExitCycQue(CycQue* sp,DataType &x) /*将循环队列的队首元素出队,值送入x */{if(Q.front==Q.rear)return 0;
X=Q.base[Q.front];
Q.front=(Q.front+1)%MAXLENp;return 1;
printf("\t\t\t请您输入程序代码!\n");}int LenCycQue(CycQue* sp) /*求循环队列的长度*/{return(Q.rear-Q.front+MAXLEN)%MAXLEN); printf("\t\t\t请您输入程序代码!\n");}void ShowCycQue(CycQue* sp){int i; printf("\n\t\t\t显示循环队列的所有元素:");if (sp->front==sp->rear) printf("\n\t\t\t循环队列为空!\n");else{ printf("\n\t\t"); i=(sp->front+1)%MAXLEN; while(i<=sp->rear) { printf("\t%C",sp->Q[i]); i=(i+1)o%MAXLEN; }}}main(){CycQue sp;int j=1;char choice,x;while(j){printf("\n");printf("\n");printf("\n"); printf("\n");printf("\n\t\t\t循 环 队 列\n;");printf("\n\t\t\t* 1------------队列初始化 *");printf("\n\t\t\t* 2------------进 队 *");printf("\n\t\t\t* 3------------出 队 *");printf("\n\t\t\t* 4------------求 队 长 *");printf("\n\t\t\t* 5------------显示 队列 *"); printf("\n\t\t\t* 6------------退 出 *");printf("\n\t\t\t***************************************");printf("\n\t\t\t请选择菜单号:0-5...");scanf("%c",&choice);getchar();if (choice=='1')InitCycQue(&sp);else if(choice=='2') { printf("\n\t\t\t请输入需要插入的x的值:"); scanf("%c",&x);getchar();InsertCycQue(&sp,x);printf("\n");printf("\n");printf("\n"); printf("\n");printf("\n\t\t\t循 环 队 列\n;");printf("\n\t\t\t* 1------------队列初始化 *");printf("\n\t\t\t* 2------------进 队 *");printf("\n\t\t\t* 3------------出 队 *");printf("\n\t\t\t* 4------------求 队 长 *");}else if(choice=='3') {ExitCycQue(&sp,&x);}else if (choice=='4')LenCycQue(&sp);else if (choice=='5')ShowCycQue(&sp);else if (choice=='0'){j=0;printf("\t\t\t程序结束!\n");}else printf("\n\t\t\t输入错误!请重新输入!\n");}}
8 楼
yuanxinen [专家分:20] 发布于 2005-11-08 12:57:00
#include <stdio.h>
#define MAXLEN 10
typedef char DataType;
typedef struct
{
DataType* Q; /*数据存储区首地址*/
int front,rear; /*队头、队尾指针*/
}cycQue; /*循环队*/
void InitCycQue(CycQue* sp)
}
sp>Q=(DataType*)malloc(MAXLEN*sizeof(DataType));
if(sp->Q==NULL)
{
printf("\t\t\t内存分配错误\n");
}
sp->front=sp->rear=0;
printf("\t\t\t内存分配成功\n");
}
int InsertCycQue(CycQue* sp,DataType x)
{
if((sp->rear+1)%MAXLEN==sp->front)
{
printf("\t\t\t队满!不能再插入元素\n");
return 0; /*队满不能入队*/
}
else
{
sp->Q[sp->rear]=x;
sp->rear=(sp->rear+1)%MAXLEN;
return 1; /*入队完成*/
}
}
int ExitCycQue(CycQue* sp,DataType &x) /*将循环队列的队首元素出队,值送x */
{
if
(Q.front==Q.rear)return 0;
X=Q.base[Q.front];
Q.front=(Q.front+1)%MAXLENp;return 1;
printf("\t\t\t请您输入程序代码!\n");
}
int LenCycQue(CycQue* sp) /*求循环队列的长度*/
{
return(Q.rear-Q.front+MAXLEN)%MAXLEN); printf("\t\t\t请您输入程序代码!\n");
}
void ShowCycQue(CycQue* sp)
{
int i;
printf("\n\t\t\t显示循环队列的所有元素:");
if (sp->front==sp->rear)
printf("\n\t\t\t循环队列为空!\n");
else
{
printf("\n\t\t");
i=(sp->front+1)%MAXLEN;
while(i<=sp->rear)
{
printf("\t%C",sp->Q[i]);
i=(i+1)o%MAXLEN;
}
}
}
main()
{CycQue sp;
int j=1;
char choice,x;
while(j)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n\t\t\t循 环 队 列\n;");
printf("\n\t\t\t* 1------------队列初始化 *");
printf("\n\t\t\t* 2------------进 队 *");
printf("\n\t\t\t* 3------------出 队 *");
printf("\n\t\t\t* 4------------求 队 长 *");
printf("\n\t\t\t* 5------------显示 队列 *");
printf("\n\t\t\t* 6------------退 出 *");
printf("\n\t\t\t***************************************");
printf("\n\t\t\t请选择菜单号:0-5...");
scanf("%c",&choice);
getchar();if (choice=='1')
InitCycQue(&sp);
else if(choice=='2')
{
printf("\n\t\t\t请输入需要插入的x的值:");
scanf("%c",&x);getchar();
InsertCycQue(&sp,x);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n\t\t\t循 环 队 列\n;");
printf("\n\t\t\t* 1------------队列初始化 *");
printf("\n\t\t\t* 2------------进 队 *");
printf("\n\t\t\t* 3------------出 队 *");
printf("\n\t\t\t* 4------------求 队 长 *");
}
else if(choice=='3')
{ExitCycQue(&sp,&x);}
else if (choice=='4')
LenCycQue(&sp);
else if (choice=='5')
ShowCycQue(&sp);
else if (choice=='0')
{
j=0;
printf("\t\t\t程序结束!\n");
}else printf("\n\t\t\t输入错误!请重新输入!\n");
}
}
9 楼
yuanxinen [专家分:20] 发布于 2005-11-08 13:00:00
我也没改多少,不知是否完善,请多多指教,我也是刚学的
10 楼
太阳人 [专家分:30] 发布于 2005-11-09 17:28:00
#include <stdio.h>
#define MAXLEN 10
typedef char DataType;
typedef struct{
DataType* Q; /*数据存储区首地址*/
int front;
int rear; /*队头、队尾指针*/
}CycQue; /*循环队*/
void InitCycQue(CycQue &sp)
{
sp.Q=new DataType;
if(sp.Q==NULL)
{
printf("\t\t\t内存分配错误\n");
}
sp.front=sp.rear=0;
printf("\t\t\t内存分配成功\n");
}
int InsertCycQue(CycQue &sp,char x)
{
if((sp.rear+1)%MAXLEN==sp.front)
{
printf("\t\t\t队满!不能再插入元素\n");
return 0; /*队满不能入队*/
}
else
{
sp.Q[sp.rear]=x;
sp.rear=(sp.rear+1)%MAXLEN;
return 1; /*入队完成*/
}
}
int ExitCycQue(CycQue &sp,char &x) /*将循环队列的队首元素出队,值送x */
{
if
(sp.front==sp.rear )return 0;
x=sp.Q[sp.front];
sp.front=(sp.front +1)%MAXLEN;return 1;
printf("\t\t\t请您输入程序代码!\n");
}
int LenCycQue(CycQue &sp) /*求循环队列的长度*/
{
return(sp.rear-sp.front+MAXLEN)%MAXLEN; printf("\t\t\t请您输入程序代码!\n");
}
void ShowCycQue(CycQue &sp)
{
int i;
printf("\n\t\t\t显示循环队列的所有元素:");
if (sp.front==sp.rear)
printf("\n\t\t\t循环队列为空!\n");
else
{
printf("\n\t\t");
i=(sp.front+1)%MAXLEN;
while(i<=sp.rear)
{
printf("\t%C",sp.Q[i]);
i=(i+1)%MAXLEN;
}
}
}
void main()
{ CycQue sp;
int j=1;
char choice,x;
while(j)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n\t\t\t循 环 队 列\n;");
printf("\n\t\t\t* 1------------队列初始化 *");
printf("\n\t\t\t* 2------------进 队 *");
printf("\n\t\t\t* 3------------出 队 *");
printf("\n\t\t\t* 4------------求 队 长 *");
printf("\n\t\t\t* 5------------显示 队列 *");
printf("\n\t\t\t* 6------------退 出 *");
printf("\n\t\t\t***************************************");
printf("\n\t\t\t请选择菜单号:0-5...");
scanf("%c",&choice);
getchar(); if (choice=='1')
InitCycQue(sp);
else if(choice=='2')
{
printf("\n\t\t\t请输入需要插入的x的值:");
scanf("%c",&x);getchar();
InsertCycQue(sp,x);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n\t\t\t循 环 队 列\n;");
printf("\n\t\t\t* 1------------队列初始化 *");
printf("\n\t\t\t* 2------------进 队 *");
printf("\n\t\t\t* 3------------出 队 *");
printf("\n\t\t\t* 4------------求 队 长 *");
}
else if(choice=='3')
ExitCycQue(sp,x);
else if (choice=='4')
LenCycQue(sp);
else if (choice=='5')
ShowCycQue(sp);
else if (choice=='0')
{
j=0;
printf("\t\t\t程序结束!\n");
} else printf("\n\t\t\t输入错误!请重新输入!\n");
}
}
我是在vc++6.0上改的,能运行,你试试
我来回复