33,311
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
#define FLASE 0
#define TRUE 1
typedef int QueueElemType;
typedef struct Node
{
QueueElemType data;
struct Node *next;
}LinkQueueNode;
typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
int initQueue(LinkQueue *Q)
{
Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(Q->front!=NULL)
{
Q->rear=Q->front;
Q->front->next=NULL;
return(TRUE);
}else return(FLASE);
}
int EnterQueue(LinkQueue *Q,QueueElemType x)
{
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
if(NewNode!=NULL)
{
NewNode->data=x;
NewNode->next=NULL;
Q->rear->next=NewNode;
Q->rear=NewNode;
return(TRUE);
}
else return(FLASE);
}
int DeleteQueue(LinkQueue *Q,QueueElemType *x)
{
LinkQueueNode *p;
if(Q->front==Q->rear)
return(FLASE);
p=Q->front->next;
Q->front->next=p->next;
if(Q->rear==p);
Q->rear=Q->front;
*x=p->data;
free(p);
return(TRUE);
}
int print(LinkQueue *Q)
{
if(!Q)
return (FLASE);
Node *pre;
pre=Q->front->next;
while(pre) {
cout<<pre->data<<' ';
pre=pre->next;
}
return (TRUE);
}
int main()
{
LinkQueue Q;
QueueElemType x;
int i,j,ch;
initQueue(&Q) ;
while(1)
{
printf("\n队列操作:(1.入队 2.出队, 3.exit)\n");
scanf("%d", &ch);
switch(ch)
{
case(1):{
printf("输入要入队元素:");
scanf("%d",&x);
j=EnterQueue(&Q,x);
if(j){printf("入队后队列元素为");
print(&Q); }
else{printf("入队失败");
}
break;
}
case(2):{
printf("出队");
j=DeleteQueue(&Q,&x);
if(j){printf("出队后队列元素为");
print(&Q); }
else{printf("出队失败");
}
break;
}
case(3):
return 0;
}}
return 0;
}
#include<iostream>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
#define FLASE 0
#define TRUE 1
typedef int QueueElemType;
typedef struct Node
{
QueueElemType data;
struct Node *next;
}LinkQueueNode;
typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
int initQueue(LinkQueue *Q)
{
Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if (Q->front == NULL)
return FLASE;
Q->rear=Q->front;
Q->front->next=NULL;
return(TRUE);
}
int EnterQueue(LinkQueue *Q,QueueElemType x)
{
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
if(NewNode == NULL)
return(FLASE);
NewNode->data=x;
NewNode->next=NULL;
Q->rear->next = NewNode;
Q->rear=NewNode;
return(TRUE);
}
int DeleteQueue(LinkQueue *Q,QueueElemType *x)
{
LinkQueueNode *p;
if(Q->front==Q->rear)
return(FLASE);
p = Q->front->next;
Q->front->next = p->next;
/*
if(Q->rear==p);
Q->rear=Q->front;
*/
*x = p->data;
free(p);
return(TRUE);
}
int print(LinkQueue *Q)
{
if(!Q)
return (FLASE);
Node *pre;
pre = Q->front->next;
while(pre) {
cout<<pre->data<<' ';
pre = pre->next;
}
return (TRUE);
}
int main()
{
LinkQueue Q;
QueueElemType x;
int i,j,ch;
initQueue(&Q) ;
while(1)
{
printf("\n队列操作:(1.入队 2.出队, 3.exit)\n");
scanf("%d", &ch);
switch(ch)
{
case(1):{
printf("输入要入队元素:");
scanf("%d",&x);
j=EnterQueue(&Q,x);
if(j){
printf("入队后队列元素为");
print(&Q);
}
else{printf("入队失败");
}
break;
}
case(2):{
printf("出队");
j=DeleteQueue(&Q,&x);
if(j){
printf("出队后队列元素为");
print(&Q);
}
else{
printf("出队失败");
}
break;
}
case(3):
return 0;
}}
return 0;
}
参考一下吧
出队时,去掉2条语句,如下:
int DeleteQueue(LinkQueue *Q,QueueElemType *x)
{
LinkQueueNode *p;
if(Q->front==Q->rear)
return(FLASE);
p = Q->front->next;
Q->front->next = p->next;
/*
if(Q->rear==p);
Q->rear=Q->front;
*/
*x = p->data;
free(p);
return(TRUE);
}
去掉就没问题了。