永发信息网

用C语言编写队列程序

答案:2  悬赏:40  手机版
解决时间 2021-03-28 01:14
用C语言编写队列程序
最佳答案
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define NULL 0
#define OK 1
#define OVERFLOW 0
#define ERROR 0
typedef int QElemType;
typedef int Status;
typedef struct QNode
{
QElemType data;
QNode *next;
}*QueuePtr;
struct LinkQueue
{
QueuePtr front,rear;//队头,队尾指针
};
//函数列表
void InitQueue(LinkQueue &Q)
{//初始化一个队列
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)//生成头结点失败
exit(OVERFLOW);
Q.front->next=NULL;
}
void DestoryQueue(LinkQueue &Q)
{ //销毁队列
while(Q.front)
{
Q.rear=Q.front->next;//Q.rear指向Q.front的下一个结点
free(Q.front);//释放Q.front所指结点
Q.front=Q.rear;//Q.front指向Q.front的下一个结点
}
}
void ClearQueue(LinkQueue &Q)
{ //将队列清为空
DestoryQueue(Q);//销毁队列
InitQueue(Q);//重新构造队列
}
Status QueueEmpty(LinkQueue Q)
{ //判断队列是否为空
if(Q.front->next==NULL)
return TRUE;
else return FALSE;
}
int QueueLength(LinkQueue Q)
{ //求队列的长度
int i=0;//计数器清0
QueuePtr p=Q.front;//p指向结点
while(Q.rear!=p)//p所指向的不是尾结点
{
i++;//计数器加1
p=p->next;
}
return i;
}
Status GetHead(LinkQueue Q,QElemType &e)
{ //若队列不空,则用e返回队头元素
QueuePtr p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;//p指向队头结点
e=p->data;//将队头元素的值赋给e
return OK;
}
void EnQueue(LinkQueue &Q,QElemType e)
{ //插入元素e为队列Q的新的队尾元素
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
//动态生成新结点
if(!p)
exit(OVERFLOW);
p->data=e;//将e的值赋给新结点
p->next=NULL;//新结点的指针为空
Q.rear->next=p;//原队尾结点的指针域为指向新结点
Q.rear=p;//尾指针指向新结点
}
Status DeQueue(LinkQueue &Q,QElemType &e)
{ //若队列不为空,删除Q的队头元素,用e返回其值
QueuePtr p;
if(Q.front==Q.rear)//队列为空
return ERROR;
p=Q.front->next;//p指向队头结点
e=p->data;//队头元素赋给e
Q.front->next=p->next;//头结点指向下一个结点
if(Q.rear==p)//如果删除的队尾结点
Q.rear=Q.front;//修改队尾指针指向头结点
free(p);
return OK;
}
void QueueTraverse(LinkQueue Q,void(*visit)(QElemType))
{ //对队头到队尾依次对队列中每个元素调用函数visit()
QueuePtr p;
p=Q.front->next;
while(p)
{
visit(p->data);//对p所指元素调用visit()
p=p->next;
}
printf("\n");
}
void print(QElemType e)
{
printf("%2d",e);
}
void main()
{
int i,k;
QElemType d;
LinkQueue q;
InitQueue(q);//构造一个空栈
for(i=1;i<=5;i++)
{
EnQueue(q,i);
}
printf("栈的元素为:");
QueueTraverse(q,print);
k=QueueEmpty(q);
printf("判断栈是否为空,k=%d(1:为空9;0:不为空)\n",k);
printf("将队头元素赋给d\n");
k=GetHead(q,d);
printf("队头元素为d=%d\n",d);
printf("删除队头元素:\n");
DeQueue(q,d);
k=GetHead(q,d);
printf("删除后新的队头元素为d=%d\n",d);
printf("此时队列的长度为%d\n",QueueLength(q));
ClearQueue(q);//清空队列
printf("清空队列后q.front=%u,q.rear=%u,q.front->next=%u\n",q.front,q.rear,q.front->next);
DestoryQueue(q);
printf("销毁队列后,q.front=%u,q.rear=%u\n",q.front,q.rear);
全部回答
LZ你想学编程的话我建议去饭客网络学习,那里有专门的版块供大家交流学习,还有许多教程供大家观看,你的问题到那里可以解决
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
宜兴三洞是指?
THE ROCK 是WWE的明星?
练少林易筋经怎样呼吸?
iphone的秒表计次如何累计?
远成快运(二道街新公安局对面远成快运)地址好
为什么点开猫扑,全是女性啊,性感之类的??
墨水湖7月份清淤后,水质变好了吗
我的vivox3l突然黑屏了用什么样的办法都打不
CST是什么意思?
怎么调节D7000光圈
干煸茶树菇怎么做?
程度副词从高到低,怎么排序
有谁知道这个是什么?是监控吗
萍乡到东莞厚街的火车有没有。。。多少钱啊
彼人之,予人之,彼能为之,予何不能为之
推荐资讯
杨桃切开放着会不会坏
螺杆压缩机吸气冷却电机 过热度变大多少
婚前男方的房子 婚后办的房产证 共有情况是单
谁心中有泪 谁青春无悔 敬勇敢一杯
月末最后一天烫的遍体鳞伤,注定不平凡的7月
若2×8n×16n=222,则n=________.
有没有从长沙直接到烟台的火车?
为什么有时在水里,胖子会浮起来,而瘦的会沉
b站免流量卡查不到订单
欧洲中世纪的谚语说:“我的附庸不是我的附庸
蒙古袍纯白色好看还是乳白色好看
普通纸张按克重可分为60gsm、80gsm、100gsm、
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?