请大家帮忙用c语言编个队列的源程序
建立一队列(循环或链式),实现以下操作:1、显示所有元素;2、入队;3、出队;4、再次显示所有元素。...
建立一队列(循环或链式),实现以下操作:
1、显示所有元素;
2、入队;
3、出队;
4、再次显示所有元素。 展开
1、显示所有元素;
2、入队;
3、出队;
4、再次显示所有元素。 展开
2个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
typedef struct QNode{
int data;
struct QNode *next;
} LinkNode;//每个结点的定义
typedef struct{
LinkNode *front, *rear;
}LinkQuene;//采用链表结构的队列
void InitQuene(LinkQuene &Q)//带有头结点的队列
{
Q.front=(LinkNode *)malloc(sizeof(QNode));
Q.rear=Q.front;
}
bool EmptyQuene(LinkQuene Q)
{
if(Q.front==Q.rear)
return true;
else
return false;
}
void QueneTraverse(LinkQuene Q)
{
if(EmptyQuene(Q)==false)
{
LinkNode *p=Q.front->next;
printf("\n当前队列的遍历序列为:");
while(p!=Q.rear)
{
printf("%d->",p->data);
p=p->next;
}
printf("%d\n",p->data);
}
}
void EnQuene(LinkQuene &Q, int e)
{
LinkNode *p=(LinkNode *)malloc(sizeof(QNode));
if(!p)
exit(0);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
void DeQuene(LinkQuene &Q, int &e)
{
LinkNode *p;
if(EmptyQuene(Q))
{ printf("队列为空!\n");
exit(0);
}
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
}
void menu()
{
printf("\n***************************\n");
printf("**[1]新建队列 **\n");
printf("**[2]入队列 **\n");
printf("**[3]出队列 **\n");
printf("**[4]遍历整个队列 **\n");
printf("**[0]退出 **\n");
printf("***************************\n");
printf("请输入命令:\n");
}
void main()
{
LinkQuene Q;
InitQuene(Q);
int a,order;
char ans,temp;
while(1)
{
menu();
ans='n';
scanf("%d",&order);
switch(order)
{
case 1:
do{
printf("请输入队列的元素:\n");
scanf("%d",&a);
fflush(stdin); //清空键盘缓冲区(过滤回车)
EnQuene(Q,a);
printf("是否继续添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='Y');
QueneTraverse(Q);
break;
case 2:
if( EmptyQuene(Q))
{
printf("队列为空!\n");
break;
}
do{
printf("请输入添加到队列的元素:\n");
scanf("%d",&a);
fflush(stdin);
EnQuene(Q,a);
printf("是否继续添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;
case 3:
if(EmptyQuene(Q))
{
printf("队列为空!\n");
break;
}
else{
do{
DeQuene(Q,a);
fflush(stdin);
printf("元素%d已经出队列\n",a);
if(EmptyQuene(Q)==false)
{
printf("是否继续出队列?(Y/N)");
scanf("%c",&ans);
}
else
{
printf("队列已空!\n");
break;
}
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;
}
case 4:
if(EmptyQuene(Q))
{
printf("队列为空!\n");
break;
}
QueneTraverse(Q);break;
case 0:
exit(0);
default:
printf("您输入的命令有误!\n");
}
}
}
#include <stdlib.h>
typedef struct QNode{
int data;
struct QNode *next;
} LinkNode;//每个结点的定义
typedef struct{
LinkNode *front, *rear;
}LinkQuene;//采用链表结构的队列
void InitQuene(LinkQuene &Q)//带有头结点的队列
{
Q.front=(LinkNode *)malloc(sizeof(QNode));
Q.rear=Q.front;
}
bool EmptyQuene(LinkQuene Q)
{
if(Q.front==Q.rear)
return true;
else
return false;
}
void QueneTraverse(LinkQuene Q)
{
if(EmptyQuene(Q)==false)
{
LinkNode *p=Q.front->next;
printf("\n当前队列的遍历序列为:");
while(p!=Q.rear)
{
printf("%d->",p->data);
p=p->next;
}
printf("%d\n",p->data);
}
}
void EnQuene(LinkQuene &Q, int e)
{
LinkNode *p=(LinkNode *)malloc(sizeof(QNode));
if(!p)
exit(0);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
void DeQuene(LinkQuene &Q, int &e)
{
LinkNode *p;
if(EmptyQuene(Q))
{ printf("队列为空!\n");
exit(0);
}
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
}
void menu()
{
printf("\n***************************\n");
printf("**[1]新建队列 **\n");
printf("**[2]入队列 **\n");
printf("**[3]出队列 **\n");
printf("**[4]遍历整个队列 **\n");
printf("**[0]退出 **\n");
printf("***************************\n");
printf("请输入命令:\n");
}
void main()
{
LinkQuene Q;
InitQuene(Q);
int a,order;
char ans,temp;
while(1)
{
menu();
ans='n';
scanf("%d",&order);
switch(order)
{
case 1:
do{
printf("请输入队列的元素:\n");
scanf("%d",&a);
fflush(stdin); //清空键盘缓冲区(过滤回车)
EnQuene(Q,a);
printf("是否继续添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='Y');
QueneTraverse(Q);
break;
case 2:
if( EmptyQuene(Q))
{
printf("队列为空!\n");
break;
}
do{
printf("请输入添加到队列的元素:\n");
scanf("%d",&a);
fflush(stdin);
EnQuene(Q,a);
printf("是否继续添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;
case 3:
if(EmptyQuene(Q))
{
printf("队列为空!\n");
break;
}
else{
do{
DeQuene(Q,a);
fflush(stdin);
printf("元素%d已经出队列\n",a);
if(EmptyQuene(Q)==false)
{
printf("是否继续出队列?(Y/N)");
scanf("%c",&ans);
}
else
{
printf("队列已空!\n");
break;
}
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;
}
case 4:
if(EmptyQuene(Q))
{
printf("队列为空!\n");
break;
}
QueneTraverse(Q);break;
case 0:
exit(0);
default:
printf("您输入的命令有误!\n");
}
}
}
展开全部
#include <Stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int status;
typedef struct qnode{
int data;
struct qnode *next;
}qNode,*queue;
typedef struct {
queue front;
queue rear;
}Queue;
void show(Queue *Q);
status create(Queue *Q);
status enQueue(Queue *Q,int e);
status DeQueue(Queue *Q,int e);
int main(){
Queue Q;
char c;
int n;
create(&Q);
while(true){
printf("\n请选择你想要执行的操作:\n1.元素入队\n2.元素出队\n3.退出程序\n");
scanf(" %c",&c);
if(c == '1'){
printf("请输入入队元素:\n");
scanf("%d",&n);
enQueue(&Q,n);
show(&Q);
}else if(c == '2'){
n = DeQueue(&Q,n);
if(n != ERROR){
printf("出队的元素是:%d\n",n);
show(&Q);
}
}else{
exit(0);
}
}
}
status create(Queue *Q){
Q->front = Q->rear = (qNode *)malloc(sizeof(qNode));
Q->front->next = NULL;
return OK;
}
status enQueue(Queue *Q,int e){
qNode *p = (qNode *)malloc(sizeof(qNode));
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return OK;
}
status DeQueue(Queue *Q,int e){
qNode *p;
if(Q->front == Q->rear){
printf("队列为空!\n");
return ERROR;
}
p = Q->front->next;
e = p->data;
Q->front->next = p->next;
if(Q->rear == p){
Q->rear = Q->front;
}
free(p);
return OK;
}
void show(Queue *Q){
qNode *p = Q->front->next;
while(p){
printf("%d\t",p->data);
p = p->next;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询