早教吧 育儿知识 作业答案 考试题库 百科 知识分享

简单数据结构问题,在线等,急!在具有n个单元的顺序存储循环队列中,假定front和rear分别是队头指针和队尾指针,请判断对空的条件,给出元素x入队操作的语句?

题目详情
简单数据结构问题,在线等,急!
在具有n个单元的顺序存储循环队列中,假定front和rear分别是队头指针和队尾指针,请判断对空的条件,给出元素x入队操作的语句?
▼优质解答
答案和解析
/* 顺序队 */
#include "stdio.h"
#include "stdlib.h"

typedef char datatype;
typedef struct QNode{
datatype data;
struct QNode *next;
}QType; //链队结点类型
typedef struct{
QType *front; //指向单链表队头结点
QType *rear; //指向单链表队尾结点
}LinkQueue;
void InitQueue(SqQueue *q){ //初始化队列
q->rear=q->front=NULL;
}
int Enqueue(SqQueue *q, datatype x)
{
QType *s;
s=(QType *)malloc(sizeof(QType));
s->data=x;
s->next=NULL;
if(q->front==NULL&&q->rear==NULL) //若为空队,直接插入
q->rear=q->front=s;
else{
q->rear->next=s; //不是空队列,则在队尾插入
q->rear=s; //修改队尾指针
}
}
int DeQueue(SqQueue *s, datatype *x){ //出对运算算法
QType *p;
if(q->front==NULL&&q->rear==NULL) //若为空队
return 0;
p=q->front;
*x=p->data;
if(q->rear==q->front) //队列只有一个结点
q->rear=q->front=NULL;
free(p);
return 1;
}
int GetHead(SqQueue *q, datatype *x){ //取对头元素运算方法
if(q->front==NULL&&q->rear==NULL) //若为空队
return 0;
*x=q->front->data; //取队头元素
return 1;
}

int QueueEmpty(SqQueue q){ //判断是否为空
if(q->front==NULL&&q->rear==NULL) //空队
return 1;
else
return 0;
}
void Traversal_SqQueue(SqQueue q){ //遍历
QType *p;
if(q->front==NULL&&q->rear==NULL) //空队
printf("此队列目前是空队\n");
else
while
printf("%c",q.data[q.front]);
}
printf("\n");
}
void main()
{SqQueue sq; int i=0;datatype a[]="abcdefghijklmn", c;
InitQueue(&sq);
while(a[i])
{if(!(Enqueue(&sq,a[i])))
printf("入队失败.\n");
i++;}
printf("队列的初始状态为:\n");
Traversal_SqQueue(sq);
if(!(DeQueue(&sq, &c)))
printf("出队失败.\n");
else
printf("%c出队后,队列为:\n",c);
Traversal_SqQueue(sq);
c='f';
{if(!(Enqueue(&sq,c)))
printf("入队失败.\n");
else
printf("%c入队后,队列为:\n",c);
Traversal_SqQueue(sq);
if(!(DeQueue(&sq,&c)))
printf("出队失败\n");
else
printf("%c出队后,队列为:\n", c);
Traversal_SqQueue(sq);}
if(!(GetHead(&sq, &c)))
printf("队空.\n");
else
printf("取队头元素%c后,队列为:\n",c);
Traversal_SqQueue(sq);
}